Group By 문제 KEY POINT
난이도 : LEVEL 2
CAR_RENTAL_COMPANY_CAR 테이블에서 '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 자동차가 자동차 종류 별로 몇 대인지 출력하는 SQL문을 작성해주세요. 이때 자동차 수에 대한 컬럼명은 CARS로 지정하고, 결과는 자동차 종류를 기준으로 오름차순 정렬해주세요.
CAR_ID | CAR_TYPE | DAILY_FEE | OPTIONS |
---|---|---|---|
1 | 세단 | 16000 | 가죽시트,열선시트,후방카메라 |
2 | SUV | 14000 | 스마트키,네비게이션,열선시트 |
3 | SUV | 22000 | 주차감지센서,후방카메라 |
4 | 트럭 | 35000 | 주차감지센서,네비게이션,열선시트 |
5 | SUV | 16000 | 가죽시트,네비게이션,열선시트,후방카메라,주차감지센서 |
CAR_TYPE | CARS |
---|---|
SUV | 2 |
세단 | 1 |
트럭 | 1 |
1️⃣ '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 자동차가 자동차 종류 별로 몇 대인지 출력한다.
WHERE OPTIONS in ('통풍시트', '열선시트', '가죽시트')
라고 하는 경우, OPTIONS
가 하나의 문자열로 이루어져 있어서, 해당 문자만을 가진 행만 출력한다. ("가죽시트,열선시트,후방카메라" -> 출력하지 못함)WHERE OPTIONS like '%통풍시트%' or OPTIONS like '%열선시트%' or OPTIONS like '%가죽시트%'
라고 할 수도 있지만, 해당 문제에서 시트가 위의 3가지의 경우밖에 없으므로 where OPTIONS like "%시트%"
만 입력해도 된다.group by CAR_TYPE
를 사용하여 자동차 종류 별로 그룹화하고 count(*)
로 조건을 만족하는 자동차의 개수를 센다.2️⃣ 자동차 종류를 기준으로 오름차순 정렬한다.
order by CAR_TYPE
SELECT CAR_TYPE, count(*) as CARS
from CAR_RENTAL_COMPANY_CAR
where OPTIONS like "%시트%"
group by CAR_TYPE
order by CAR_TYPE
난이도 : LEVEL 2
APPOINTMENT 테이블에서 2022년 5월에 예약한 환자 수를 진료과 코드 별로 조회하는 SQL문을 작성해주세요. 이때, 컬럼명은 '진료과 코드', '5월예약건수'로 지정해주시고 결과는 진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고, 예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬해주세요.
APNT_YMD | APNT_NO | PT_NO | MCDP_CD | MDDR_ID | APNT_CNCL_YN | APNT_CNCL_YMD |
---|---|---|---|---|---|---|
2022-04-14 09:30:00 | 47 | PT22000064 | GS | DR20170123 | N | NULL |
2022-04-15 10:30:00 | 48 | PT22000065 | OB | DR20100231 | N | NULL |
2022-05-15 17:30:00 | 49 | PT22000086 | OB | DR20100231 | N | NULL |
2022-05-18 10:30:00 | 52 | PT22000019 | GS | DR20100039 | N | NULL |
2022-05-19 12:00:00 | 53 | PT22000020 | FM | DR20010112 | N | NULL |
2022-05-22 08:30:00 | 54 | PT22000021 | GS | DR20100039 | N | NULL |
2022-05-04 10:30:00 | 56 | PT22000023 | FM | DR20090112 | N | NULL |
2022-05-14 15:30:00 | 57 | PT22000074 | CS | DR20200012 | N | NULL |
2022-05-24 15:30:00 | 58 | PT22000085 | CS | DR20200012 | N | NULL |
2022-05-28 10:00:00 | 60 | PT22000092 | OS | DR20100031 | N | NULL |
1️⃣ 2022년 5월에 예약한 환자 수를 진료과 코드 별로 조회한다.
where APNT_YMD like '2022-05%'
group by MCDP_CD
count(*) as 5월예약건수
2️⃣ 진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고, 예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬한다.
order by 5월예약건수, 진료과코드
SELECT MCDP_CD as 진료과코드, count(*) as 5월예약건수
from APPOINTMENT
where APNT_YMD like '2022-05%'
group by MCDP_CD
order by 5월예약건수, 진료과코드
난이도 : LEVEL 2
동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.
1️⃣ 고양이와 개가 각각 몇 마리인지 조회한다.
group by ANIMAL_TYPE = 'CAT', ANIMAL_TYPE = 'DOG'
count(*) as count
2️⃣ 고양이를 개보다 먼저 조회한다.
order by ANIMAL_TYPE
SELECT ANIMAL_TYPE, count(*) as count
from ANIMAL_INS
group by ANIMAL_TYPE = 'CAT', ANIMAL_TYPE = 'DOG'
order by ANIMAL_TYPE
난이도 : LEVEL 2
동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
1️⃣ 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회한다.
group by NAME
having
은 그룹화하고 나서 조건을 적용하지만, where
은 그룹화하기 전에 조건을 적용하기 때문이다!having count(NAME) > 1
2️⃣ 이름 순으로 조회한다.
order by NAME
SELECT NAME, count(NAME) as 'COUNT'
from ANIMAL_INS
group by NAME
having count(NAME) > 1
order by NAME
난이도 : LEVEL 2
보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.
1️⃣ 09:00부터 19:59까지, 각 시간대별로 그룹화한다.
DATE_FORMAT(DATETIME, "%H") as HOUR
을 사용하여 시간만 추출한다.group by HOUR
having HOUR >= 9 and HOUR <= 19
2️⃣ 각 시간대 별로 입양이 몇 건이나 발생했는지 조회한다.
count(*) as COUNT
를 사용하여 해당 그룹마다 몇 개의 행이 있는지를 센다.3️⃣ 시간대 순으로 정렬한다.
order by HOUR
SELECT DATE_FORMAT(DATETIME, "%H") as HOUR, count(*) as COUNT
from ANIMAL_OUTS
group by HOUR
having HOUR >= 9 and HOUR <= 19
order by HOUR