HackerRank; Weather Observation Station

랜디 Randy·2023년 11월 3일
0

SQL 문제풀이

목록 보기
2/20

Japanese Cities' Names

-- 정답코드
SELECT NAME FROM CITY WHERE COUNTRYCODE = "JPN";
--

이전에 풀었던 문제와 비슷합니다. 일주일만에 풀어서 그런가 가물가물했는데 손은 기억하고 있더군요.

Weather Observation Station 1

-- 정답코드
SELECT CITY, STATE FROM STATION;
--

이것도 딱히 어려운 것이 없는 문제입니다.

Weather Obervation Station 3

-- 정답코드
SELECT DISTINCT CITY FROM STATION WHERE MOD(ID, 2) = 0;
--

이번에는 새로운 것들이 좀 나왔습니다.
1. even ID number만 출력할 것
2. 중복을 제거할 것

1번에 사용된 문법은 MOD(a, b) 문법입니다. b를 a로 나눈 나머지 값을 반환하는데, 짝수 값을 찾아야 하므로 이 값이 0인 것만 출력하도록 했습니다.

2번의 경우에는 DISTINCT 문법을 활용했습니다. 테이블 앞에 이 문구를 붙여놓으면 중복값을 제거해줍니다.

Weather Observation Station 4

-- 정답코드
SELECT COUNT(CITY) - COUNT(DISTINCT CITY) FROM STATION; 
--

이번에는 COUNT()라는 문법을 사용했습니다. 단어 그대로 개수를 세어주는 문법입니다. CITY의 칼럼 개수와 중복을 제거한 CITY의 칼럼 개수의 차이를 물어보는 질문이었습니다.

Weather Observation Station 5


-- 정답코드
SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY LENGTH(CITY) ASC, CITY ASC
LIMIT 1;

SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY LENGTH(CITY) DESC, CITY DESC
LIMIT 1;
--

LENGTH, ORDER BY, ASC, DESC, LIMIT 을 새로 사용했습니다.

LENGTH

LENGTH는 단어 그대로 길이를 반환해줍니다.

ORDER BY

ORDER BY의 경우에는 테이블을 정렬하게 되는데, 뒤에 어떤 식으로 정렬할 것인지 언급해주면 됩니다.
중복되는 조건을 걸어줄 때에는 쉼표로 구분해주면 되는데, 왼쪽에서부터 순차적으로 정렬이 이루어지므로 순서에 신경을 써야합니다.
우선 CITY 문자열의 길이가 짧은 순서대로 나열을 해야하므로 LENGTH(CITY) ASC로 나열을 하고, 이 상태에서 알파벳 순서대로 나열을 해야하므로 CITY ASC를 사용하여 정렬했습니다.
이렇게 명령어를 입력하면 길이가 짧고, 알파벳 순서 상 먼저 오는 항목이 제일 위로 올라오게 됩니다.
이를 LIMIT을 활용하여 하나만 출력합니다.

ASC

오름차순을 의미합니다. 숫자로 따지면 작은 숫자부터, 알파벳으로 따지면 먼저 오는 것부터.

DESC

내림차순을 의미합니다.

LIMIT

출력하고싶은 칼럼의 개수에 제한을 두고싶을 때 사용합니다.
LIMIT 1 이라고 적으면서 하나의 칼럼만 출력하게 했습니다.


정리

새로 배운 문법들이 많습니다.
문제도 복잡해지면서 사용해야 할 문법이 점점 많아지고 있는데,
현실의 문제들도 정확하게 해결하기 위해서는 이렇게 조건이 까다로운 경우가 많기 때문에
이런 문법들을 미리 익혀두는 것이 중요해보입니다.

profile
데이터는 계단, 직관은 다리

0개의 댓글