[MySQL] SQL HackerRank 문제 풀이 1주차

Eunsuh Kim·2023년 3월 19일
0

SQL

목록 보기
2/3

Basic Select

Q. Revising the Select Query I

문제 원문

SELECT * 
FROM CITY
WHERE CountryCode = "USA" AND POPULATION > 100000;
  • SQL에서는 ==을 쓰지 않음

Q. Weather Observation Station 3

문제 원문

SELECT DISTINCT CITY
FROM STATION
WHERE MOD(ID, 2) = 0;

DISTINCT

  • 컬럼에서 중복을 제거한 상태로 조회하는 경우 사용 (without duplicates)

MOD

SELECT MOD(N, M);
SELECT N MOD M;
SELECT N % M;
  • N을 M으로 나눈 나머지를 반환
  • 짝수, 홀수를 판단하는 데 사용 가능

Q. Weather Observation Station 5

문제 원문

(SELECT CITY, LENGTH(CITY)
FROM STATION
WHERE LENGTH(CITY) = (SELECT MIN(LENGTH(CITY)) 
                      FROM STATION)
ORDER BY CITY asc
LIMIT 1)

UNION

(SELECT CITY, LENGTH(CITY)
FROM STATION
WHERE LENGTH(CITY) = (SELECT MAX(LENGTH(CITY)) 
                      FROM STATION)
ORDER BY CITY asc
LIMIT 1);

UNION

SELECT 컬럼이름
	FROM 테이블이름
UNION
SELECT 컬럼이름
	FROM 테이블이름
  • 여러 개의 SELECT 문의 결과를 하나의 테이블이나 결과 집합으로 표현할 때 사용
  • 이때 각각의 SELECT 문으로 선택된 컬럼(필드)의 개수와 타입은 모두 같아야 하며, 컬럼(필드)의 순서 또한 같아야 함

Advanced Select

Q. Type of Triangle

문제 원문

SELECT
    CASE
        WHEN A = B AND B = C THEN 'Equilateral'
        WHEN A + B <= C THEN 'Not A Triangle'
        WHEN A != B AND B != C AND C != A THEN 'Scalene'
        ELSE 'Isosceles'
    END AS TYPE
FROM TRIANGLES;

CASE문

SELECT
	CASE
		WHEN 조건
		THEN '반환 값'
		WHEN 조건
		THEN '반환 값'
		ELSE '위의 WHEN 조건에 해당 안되는 경우 반환 값'
	END
FROM 테이블이름;
  • CASE문 끝에 END를 써주는 것이 중요

Aggregation

Q. The Blunder

문제 원문

SELECT CEILING(AVG(SALARY) - AVG(REPLACE(SALARY,0,'')))
FROM EMPLOYEES;
  • 제시된 테이블은 맞는 값으로 구성된 테이블이며, 틀린 값을 REPLACE 함수를 써서 구함

CEILING

SELECT CEILING(숫자)
FROM 테이블이름;
  • 소수점 올림: 값보다 큰 정수 중 가장 작은 수를 가져오는 함수
  • 올림/반올림/버림 함수는 따로 다시 정리할 것

REPLACE

SELECT REPLACE(컬럼이름, '기존 문자열', '변경할 문자열')
FROM 테이블이름;

Basic Join

Q. Population Census

문제 원문

SELECT SUM(CITY.POPULATION)
FROM CITY JOIN COUNTRY ON CITY.CountryCode = COUNTRY.Code
WHERE CONTINENT = 'Asia';
  • 2가지 테이블을 join할 경우 계산하고자 하는 컬럼 이름 앞에 테이블 이름이 와야 함
profile
안녕하세요!

0개의 댓글