[HackerRank-SQL] Basic Select2
# Weather Observation Station 4
SELECT COUNT(CITY)-COUNT(DISTINCT CITY)
FROM STATION
# 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 ASC
LIMIT 1;
# Weather Observation Station 6
SELECT CITY
FROM STATION
WHERE ( CITY LIKE 'A%'
OR CITY LIKE 'E%'
OR CITY LIKE 'I%'
OR CITY LIKE 'O%'
OR CITY LIKE 'U%'
)
# Weather Observation Station 7
SELECT DISTINCT(CITY)
FROM STATION
WHERE ( CITY LIKE '%A'
OR CITY LIKE '%E'
OR CITY LIKE '%I'
OR CITY LIKE '%O'
OR CITY LIKE '%U'
)
# Weather Observation Station 8
SELECT DISTINCT(CITY)
FROM STATION
WHERE ( CITY LIKE '%A'
OR CITY LIKE '%E'
OR CITY LIKE '%I'
OR CITY LIKE '%O'
OR CITY LIKE '%U')
AND
( CITY LIKE 'A%'
OR CITY LIKE 'E%'
OR CITY LIKE 'I%'
OR CITY LIKE 'O%'
OR CITY LIKE 'U%')
코드가 너무 비효율적인 것 같아 구글링을 해봤다.
최근에 빅데이터 수업을 통해 정규식 표현을 배웠는데 SQL에서도 적용이 됐다.
REGEXP는 REGular EXPression(정규표현식)이다.
아래 표를 참고하면 .* 는 임의의 한문자가 0개 이상 일치라는 뜻이라서 % 와 비슷한 의미가 된다.
SELECT DISTINCT CITY
FROM STATION
WHERE CITY REGEXP '^[aeiou].*[aeiou]$'
참고블로그: https://itbellstone.tistory.com/88
# Weather Observation Station 9
- 마찬가지로 정규식표현을 이용해서 풀었다.
- [] 안에서의 ^ 의미는 NOT을 의미한다.
SELECT DISTINCT(CITY)
FROM STATION
WHERE CITY REGEXP '^[^aeiou]'
# Weather Observation Station 10
SELECT DISTINCT(CITY)
FROM STATION
WHERE CITY REGEXP '[^aeiou]$'
# Weather Observation Station 11
- 문제: 모음으로 시작하지않거나, 모음으로 끝나지않게 (모음으로 시작하면 모음으로 끝나지 않게)
- 이 문제는 문제해석도 그렇고 난이도가 좀 있었다고 느꼈다.
SELECT DISTINCT(CITY)
FROM STATION
WHERE CITY REGEXP '^[^aeiou]|[^aeiou]$'
# Weather Observation Station 11
- 모음으로 시작하지도, 끝나지도 않는 CITY 이름 출력하기
- | 이 있어서 & 연산자도 있을거라 생각했는데 아니어서 틀렸던 문제..
SELECT DISTINCT(CITY)
FROM STATION
WHERE CITY REGEXP '^[^aeiou].*[^aeiou]$'
# Higher Than 75 Marks
- 이름 뒤에서 세글자로 정렬하기가 관건
SELECT NAME
FROM STUDENTS
WHERE MARKS >75
ORDER BY RIGHT(NAME, 3) ASC, ID ASC
# Higher Than 75 Marks
- 다시 처음으로 돌아간 난이도
SELECT NAME
FROM Employee
ORDER BY NAME
# Emplyee Salaries
- 이것도 기본 중 기본기본문제
SELECT name
FROM Employee
WHERE salary > 2000 AND months < 10
ORDER BY employee_id