1. 고양이와 개는 몇 마리 있을까 - GROUP BY
동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE
1. SELECT ANIMAL_TYPE, count 인데, count라는 컬럼이 없으므로 어떤 식 AS count 가 되어야 한다.
즉, 어떤 식의 결과값을 count로 정의!
ANIMAL_TYPE 별 개수를 구하는 것이므로 COUNT(ANIMAL_TYPE) AS count
2. FROM ANIMAL_INS(테이블명)
3. GROUP BY ** 이 문제의 핵심!
* GROUP BY : 특정 컬럼을 그룹화하여 데이터 조회!
GROUP BY 특정컬럼명
말 그대로 특정컬럼을 그룹화 한다는 의미인데,
그룹화를 하면 조회된 데이터를 통계를 내기 위한 집계함수( avg, sum,...)를 사용하기 쉬워진다!
GROUP BY ANIMAL_TYPE == ANIMAL_TYPE으로 그룹화 == cat끼리, dog끼리 그룹
4. ORDER BY ANIMAL_TYPE : Cat 먼저 조회해야하므로, ORDER BY (ASC) 사용 ( C < D)
2. 동명 동물 수 찾기
동물 보호소에 들어온 동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회하는 SQL문을 작성해주세요. 이때 결과는 이름이 없는 동물은 집계에서 제외하며, 결과는 이름 순으로 조회해주세요.
SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT > 1
ORDER BY NAME
1. SELECT NAME, COUNT 인데, COUNT 라는 컬럼이 없으므로 어떤 식 AS COUNT 가 되어야 한다.
즉, 어떤 식의 결과값을 count로 정의!
NAME별 개수를 구하는 것이므로 COUNT(NAME) AS COUNT
2. FROM ANIMAL_INS(테이블명)
3. ** GROUP BY를 쓸 때 WHERE과 HAVING의 사용에 주의해야한다! ** 이 문제의 핵심!!
참고로, mysql 문법 작성순서는 다음과 같다
SELECT 컬럼명
FROM 테이블명
WHERE 조건식
GROUP BY 칼럼명
HAVING 조건식
ORDER BY 칼럼명
하지만, 실행작동순서는 작성 순서와 다르다!!
위의 경우로만 보면,
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
여기서 WHERE 과 HAVING 의 차이가 드러난다
WHERE : 그룹화하기 전의 조건
HAVING : 그룹화 후의 조건
따라서, 문제를 보면,
이름이 없는 동물은 집계에서 제외
-> 집계(GROUP BY)를 하기 전에 미리 걸러주어라! 하는 의미이므로
WHERE NAME IS NOT NULL 을 사용
동물 이름 중 두 번 이상 쓰인 이름과 해당 이름이 쓰인 횟수를 조회
동물 이름으로 GROUP 화를 먼저 한 후에 (GROUP BY NAME)
"두번 이상" 이라는 조건을 걸어주면 된다!
따라서 HAVING COUNT > 1 을 사용
4. 마지막으로 결과는 이름순으로 조회하라 했으므로,
ORDER BY NAME
'Computer Science > 자료구조와 알고리즘' 카테고리의 다른 글
[프로그래머스\SQL 고득점 kit] GROUP BY - 입양 시각 구하기(2) 풀이 2가지 (mysql) (0) | 2021.12.18 |
---|---|
[프로그래머스\SQL 고득점 kit] GROUP BY - 입양 시각 구하기(1) 풀이 3가지 mysql (0) | 2021.12.18 |
[프로그래머스\SQL 고득점 kit] SUM, MAX, MIN :Mysql (0) | 2021.12.17 |
[프로그래머스\SQL 고득점 kit] SELECT문 :Mysql(1~7번), Oracle(7번) (0) | 2021.12.12 |
[Python] 수행시간과 메모리 사용량 측정 (0) | 2021.07.16 |