SQL/SQL 문제

[SQL] HackerRank - Blunder, Census, African, 75 Marks(E)

dori_0 2022. 5. 19. 23:14

1. The Blunder

2. Population Census

3. African Cities

4. Higher Than 75 Marks

 

HackerRank

HackerRank is the market-leading technical assessment and remote interview solution for hiring developers. Learn how to hire technical talent from anywhere!

www.hackerrank.com

 


1. The Blunder

 

조건 1) salary 값의 평균에서 잘못 계산한 salary의 평균 빼기

조건 2) 올림으로 계산하기

 

SELECT CEIL(AVG(salary) - AVG(REGEXP_REPLACE(salary, '[0]', '')))
  FROM employees;
  • 잘못 계산한 salary를 구하기 위해 REGEXP_REPLACE를 사용하였다.
    • salary의 0을 없는 것처럼 처리해주기 
  • CEIL을 이용해 올림으로 계산하였다.

 

 

 

2. Population Census

 

조건 1) city 테이블과 country 테이블 JOIN하기

조건 2) country 테이블의 continent가 'Asia'라는 조건 달아주기

조건 3) city 테이블의 population 합계 추출하기

 

SELECT SUM(city.population)
  FROM city
 INNER JOIN country
         ON city.countrycode = country.code
 WHERE country.continent = 'Asia';
  • city의 countrycode와 country의 code를 기준으로 두 테이블을 INNER JOIN 해주었다.
  • WHERE절에 continent가 'Asia'라는 조건을 달아주었다.

 

 

 

3. African Cities

 

조건 1) city 테이블과 country 테이블 JOIN하기

조건 2) country 테이블의 continent가 'Africa'라는 조건 달아주기

조건 3) city 테이블의 name 추출하기

 

SELECT city.name
  FROM city
 INNER JOIN country
         ON city.countrycode = country.code
 WHERE country.continent = 'Africa';
  • city의 countrycode와 country의 code를 기준으로 두 테이블을 INNER JOIN 해주었다
  • WHERE 절에 continent가 'Africa'라는 조건을 달아주었다.

 

 

 

 

4. Higher Than 75 Marks

 

조건 1) marks가 75보다 커야한다.

조건 2) 이름의 마지막 3글자를 기준으로 정렬 해주어야 한다. 만약 이름이 같다면 ID를 기준으로 오름차순 해야한다.

 

SELECT name
  FROM students
 WHERE marks > 75
 ORDER BY RIGHT(name, 3), id ASC;
  • marks가 75보다 크다는 조건을 WHERE절에 적었다.
  • RIGHT 함수를 이용해 name의 오른쪽 3글자만 추출해 정렬 조건에 넣어 주었다. 그 다음 조건으로는 id를 추가했다.