Posts [programmers] SQL 고득점 Kit - GROUP BY 문제 답모음 (MySQL)
Post
Cancel

[programmers] SQL 고득점 Kit - GROUP BY 문제 답모음 (MySQL)

SQL 고득점 Kit - GROUP BY 문제 답모음 (MySQL)

SQL SELECT문 개념 정리하러 가기

SELECT 기본 구문

1
2
3
4
5
SELECT <column> FROM <table>
[WHERE <condition>]
[GROUP BY <column>]
[ORDER BY <column [ASC/DESC]>]
[LIMIT <integer>];

고양이와 개는 몇 마리 있을까

고양이와 개는 몇 마리 있을까 문제 풀러가기

1
2
3
4
SELECT ANIMAL_TYPE, COUNT(ANIMAL_TYPE) AS COUNT
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE;
  • GROUP BY 란 레코드의 값이 같은 것끼리 하나로 묶어주는 것이다.
    • ANIMAL_TYPE으로 묶어 Cat과 Dog가 몇 마리인지 정리할 수 있다.
  • 고양이가 개보다 먼저 조회되기 위해 ORDER BY를 사용하였다.

동명 동물 수 찾기

동명 동물 수 찾기 문제 풀러가기

1
2
3
4
5
SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME;
  • 레코드를 그룹화하여 조건 처리하여 문제 풀고자 다음의 기본 구조를 변형하였다.

    1
    
    SELECT <column> FROM <table> GROUP BY <그룹화할 컬럼> HAVING <조건식>;
    
  • NAME으로 그룹화하여 동물 이름 중 두 번 이상 쓰인 이름을 찾기 위해 HAVING 을 통해 구현하였다.

입양 시각 구하기(1)

입양 시각 구하기(1) 문제 풀러가기

1
2
3
4
5
SELECT HOUR(DATETIME) AS HOUR, COUNT(DATETIME) AS COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING 9 <= HOUR AND HOUR <= 19
ORDER BY HOUR;
  • DATETIME에 시간대별로 조회하기 위해 GROUP BY를 HOUR(DATETIME)하고 HAVING을 통해 조회하고 싶은 9시부터 19시까지의 시간대의 조건을 두었다.
  • 시간대 별로 정렬하기 위해 ORDER BY 을 사용한다.

입양 시각 구하기(2)

입양 시각 구하기(2) 문제 풀러가기

1
2
3
4
5
6
SET @HOUR = -1;
SELECT
    (@HOUR := @HOUR + 1) AS HOUR,
    (SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @HOUR) AS COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23;
  • 입양 시간대를 0시부터 23시까지를 조회해야 하기에 HOUR의 변수를 이용한다.
  • 참고) 대입 연산자
    • = : 왼쪽 피연산자에 오른쪽 피연산자를 대입한다.
      • SET문이나 UPDATE 문의 SET절에서만 대입 연산자로 사용된다.
    • := : 왼쪽 피연산자에 오른쪽 피연산자를 대입한다.
This post is licensed under CC BY 4.0 by the author.