-
프로그래머스[SQL 잡히는대로 다풀기] - 최대값 구하기, 최소값 구하기, 동물 수 구하기, 중복 제거하기, 고양이와 개는 몇마리 있을 까?, 동명 동물 수 찾기, 입양 시각 구하기(1), 입양 시각 구..Database 2021. 8. 6. 00:20728x90반응형
최대값 구하기
문제 url : https://programmers.co.kr/learn/courses/30/lessons/59415
문제 내용 : 가장 최근에 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.
풀이 :
- 가장 큰것 → MAX 함수 사용한다.(날짜도 가능하고 문자열도 가능하다.)
-- 코드를 입력하세요 SELECT max(DATETIME) from ANIMAL_INS
최소값 구하기
문제 url : https://programmers.co.kr/learn/courses/30/lessons/59415
문제 내용 : 가장 최근에 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.
풀이 :
- 가장 작은 것 → MIN 함수 사용한다.(날짜도 가능하고 문자열도 가능하다.)
- limit 연산을 사용해서 몇개를 고를 수 있다.(위에서부터
-- 코드를 입력하세요 SELECT DATETIME FROM ANIMAL_INS order by datetime limit 1 -- 코드를 입력하세요 SELECT min(DATETIME) FROM ANIMAL_INS
동물 수 구하기
문제 url : https://programmers.co.kr/learn/courses/30/lessons/59406
문제 내용 : 동물 보호소에 동물이 몇 마리 들어왔는지 조회하는 SQL 문을 작성해주세요.
풀이 :
- 개수를 구한다. → Count 함수
-- 코드를 입력하세요 SELECT count(*) from ANIMAL_INS
중복 제거하기
문제 url : https://programmers.co.kr/learn/courses/30/lessons/59408
문제 내용 : 동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.
풀이 :
- 우선 NULL인 것은 제거한다. → where not [Column] is null
- distinct로 중복을 제거한다. → distinct[Column]
- 개수를 센다 → count
-- 코드를 입력하세요 SELECT count(distinct(Name)) from ANIMAL_INS where not NAME is null
고양이와 개는 몇 마리 있을까
문제 url : https://programmers.co.kr/learn/courses/30/lessons/59040
문제 내용 : 동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.
풀이 :
- 종류별로 각각 → Group by로 묶는다.
- 함정 : Cat 부터 나와야하니 Order by를 사용한다.
-- 코드를 입력하세요 SELECT ANIMAL_TYPE, count(*) from ANIMAL_INS group by ANIMAL_TYPE order by ANIMAL_TYPE
동명 동물 수 찾기
문제 url : https://programmers.co.kr/learn/courses/30/lessons/59041
문제 내용 : 동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
풀이 :
- 이름 중에 두번 이상 → 이름으로 묶어서 안에 count가 1 보다 큰 것들을 조건으로 준다.
- group by의 조건 → Having
- 이름순 정렬 → order by NAME
-- 코드를 입력하세요 SELECT NAME, count(*) From ANIMAL_INS where NOT NAME is null group by NAME having count(*) > 1 order by NAME
입양 시각 구하기(1)
문제 url : https://programmers.co.kr/learn/courses/30/lessons/59412
문제 내용 : 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
풀이 :
- Hour, Minute, YEAR, MONTH, DAY 같은 함수를 이용해서 해당 기간을 도출할 수 있다.
- Between A and B 를 사용해서 해당 구간을 구한다.
-- 코드를 입력하세요 SELECT Hour(DATETIME) as HOUR, count(*) as COUNT from ANIMAL_OUTS group by Hour(DATETIME) having Hour between 9 and 19 order by Hour
입양 시각 구하기(2)
문제 url : https://programmers.co.kr/learn/courses/30/lessons/59413
문제 내용 : 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
풀이 : 시간이 없기 때문에, set과 recursive는 넘기고 직관적인 코드를 가져왔다.
- LEFT JOIN 을 해서 둘이 이어 붙힌다.
- 그냥 from 없이 selet 만으로 데이터 생성이 가능하다!
SELECT TIME, count(ANIMAL_ID) FROM (SELECT 0 AS TIME UNION ALL SELECT 1 AS TIME UNION ALL SELECT 2 AS TIME UNION ALL SELECT 3 AS TIME UNION ALL SELECT 4 AS TIME UNION ALL SELECT 5 AS TIME UNION ALL SELECT 6 AS TIME UNION ALL SELECT 7 AS TIME UNION ALL SELECT 8 AS TIME UNION ALL SELECT 9 AS TIME UNION ALL SELECT 10 AS TIME UNION ALL SELECT 11 AS TIME UNION ALL SELECT 12 AS TIME UNION ALL SELECT 13 AS TIME UNION ALL SELECT 14 AS TIME UNION ALL SELECT 15 AS TIME UNION ALL SELECT 16 AS TIME UNION ALL SELECT 17 AS TIME UNION ALL SELECT 18 AS TIME UNION ALL SELECT 19 AS TIME UNION ALL SELECT 20 AS TIME UNION ALL SELECT 21 AS TIME UNION ALL SELECT 22 AS TIME UNION ALL SELECT 23 AS TIME) as A LEFT JOIN ANIMAL_OUTS as B ON A.TIME = HOUR(B.DATETIME) GROUP BY A.TIME
이름이 없는 동물의 아이디
문제 url : https://programmers.co.kr/learn/courses/30/lessons/59039
문제 내용 : 동물 보호소에 들어온 동물 중, 이름이 없는 채로 들어온 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다.
풀이 :
- 없는 것은 is null!
-- 코드를 입력하세요 select ANIMAL_ID from ANIMAL_INS where name is null order by animal_id
이름이 있는 동물의 아이디
문제 url : https://programmers.co.kr/learn/courses/30/lessons/59407
문제 내용 : 동물 보호소에 들어온 동물 중, 이름이 있는 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다.
풀이 :
- 있는 것은 not [column] is null!
-- 코드를 입력하세요 SELECT ANIMAL_ID from ANIMAL_INS where NOT NAME IS NULL order by ANIMAL_ID
NULL 처리하기
문제 url : https://programmers.co.kr/learn/courses/30/lessons/59410
문제 내용 : 입양 게시판에 동물 정보를 게시하려 합니다. 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 "No name"으로 표시해 주세요.
풀이 :
- UNION 연산을 사용해서 두개의 테이블을 이어붙힌다. JOIN이 아니다.
- Null 값을 바꾸기 → null 값에 해당하는 값들을 찾아서 SELECT 절에서 바꿔버린다.
-- 코드를 입력하세요 SELECT ANIMAL_TYPE, NAME, SEX_UPON_INTAKE FROM( SELECT ANIMAL_TYPE, NAME, SEX_UPON_INTAKE, ANIMAL_ID from ANIMAL_INS where not NAME is null UNION SELECT ANIMAL_TYPE, "No name" as NAME, SEX_UPON_INTAKE, ANIMAL_ID from ANIMAL_INS where NAME is null) as A order by ANIMAL_ID
반응형'Database' 카테고리의 다른 글