본문 바로가기
SQL

[프로그래머스] SQL 1

by dev.hm 2022. 4. 19.

 

문제 1 

동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요.

단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.

 

오전부터 프로그래머스 SQL 문제를 풀다가 약간 헷갈리는(?) 문제가 나왔다. 

 

1. 이름 순으로 조회

2. 이름이 같으면 보호일자를 최신순으로 조회

 

정렬조건이 1개에서 2개로 늘어났다! 혼란.... 그럼 어떻게 해야하지?

간단하다. 우선순위가 높은 순으로 나열하면 되는 것.... 엄청 간단하네 ㅎㅎ

 

SELECT ANIMAL_ID, NAME, DATETIME FROM ANIMAL_INS ORDER BY NAME, DATETIME DESC

 

※ ORDER BY

- 기본값 ASC (오름차순 작->큰), DESC (내림차순 큰->작)

- 다중 정렬의 경우 왼쪽부터 순서대로 정렬되므로, 나열 시 순서에 주의할 것.

 


문제 2

동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.

 

이 문제를 풀기전에 다른 사이트에서 끄적이던게 있는데, 그게 아니면 몰라서 헤맸을 문제다.

상위 1번째 컬럼을 구해야하는데 내가 아는건 TOP 뿐이었다.  

그래서 구글 서치를 해보니... SQL마다 사용하는 문법이 달랐다.

 

오라클 : ROWNUM (서브쿼리 사용)

SELECT NAME FROM (SELECT * FROM ANIMAL_INS ORDER BY DATETIME) WHERE rownum = 1;

 

MSSQL : TOP

SELECT TOP 1 * NAME FROM ANIMAL_INS ORDER BY DATETIME

문제 3

동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요.

이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.

 

1. 이름 개수 조회 -> COUNT

2. 단, 중복이거나 NULL은 제외 - DISTINCT

 

SELECT COUNT(DISTINCT NAME) FROM ANIMAL_INS

 

두개를 어떻게 조합해서 사용하는지는 잘 몰랐던 것 같다.

이렇게 하나의 지식 획득(+)! 

 


문제 4

동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.

 

이전 문제에서 GROUP BY 절에 대해 좀 더 알아보고자 구글링했다가 어느정도 힌트를 얻고 풀게된 문제

하지만 어려웠다... 평소에 HAVING 절을 쓸 필요가 별로 없었기 때문에 흑흑......

 

HAVING : GROUP BY 로 집계된 값 중 특정 조건을 걸 때 사용
-> GROUP BY 절과 함께 사용해야됨!

 

SELECT NAME, COUNT(NAME) AS count FROM ANIMAL_INS GROUP BY NAME HAVING COUNT(NAME) >= 2 ORDER BY NAME

 


 

문제 5

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

 

오마갓.... 시간을 쪼개서 해야 되는 문제인가? 시간 쪼개는거부터 난관이다.

 

 

 

 

 


문제 6

입양 게시판에 동물 정보를 게시하려 합니다. 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 "No name"으로 표시해 주세요.

 

SELECT ANIMAL_TYPE, NVL2(NAME,NAME,'No name') AS NAME, SEX_UPON_INTAKE FROM ANIMAL_INS ORDER BY ANIMAL_ID

 

- 오라클에서는 NULL 값을 IS NULL 로 확인

- 값이 NULL 일 때 특정값으로 치환할 수 있도록 해주는 함수가 있다. 

 

(1) NVL : 값이 NULL일 경우 치환할 값 설정 --- NVL(컬럼, NULL일 경우)

(2) NVL2 : 값이 NULL일 경우 & 아닌 경우 치환할 값 설정 NVL2(컬럼, NULL이 아닐경우, NULL일 경우)

'SQL' 카테고리의 다른 글

[프로그래머스] SQL 2  (0) 2022.04.19