문풀 ❓/SQL

[HackerRank-SQL] Basic Select2

narang111 2022. 1. 31. 20:07

# 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