[SQL][프로그래머스 고득점KIT] GROUP BY

2022. 7. 23. 17:56·Database/SQL
반응형

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

SELECT ANIMAL_TYPE, COUNT(*) count 
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE;

동물의 TYPE 별로 그룹핑하고, 오름차순 정렬을 해줘서 조회합니다.

또한 COUNT(*)로 각 그룹에 속하는 튜플의 갯수도 같이 출력합니다.

 

2. 동명 동물 수 찾기

SELECT NAME, COUNT(*) COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT > 1
ORDER BY NAME;

GROUP의 뒤에 HAVNIG 절을 달아줌으로써 COUNT > 1 에 대항하는  GROUP만 조회합니다.

 

3. 입양 시각 구하기(1)

SELECT HOUR(DATETIME), COUNT(*) COUNT
FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) < 20
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME);

DATETIME 에서 시간만 추출해서 원하는 시간대의 입양만 조회합니다. 또한 시간대별로 GROUPING 합니다.

 

4. 입양 시각 구하기(2)

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

중요하다고 할 수 있는 부분은 SET을 활용해 새로운 칼럼을 만들어주는 것입니다. 이 이유는 원본 테이블의 DATETIME을 보면 0시~23시 중간에 COUNT가 0인 시간대가 있기 때문이다. 따라서 문제에서 요구하는 연속적인 [0,1,2,3, ..., 23] 시까지의 모든 튜플을 만들어주어야 한다.

 

SET 문을 통해서 @HOUR 라는 변수를 잡습니다. (int hour;  처럼)

SET @HOUR = -1; 
SELECT (@HOUR := @HOUR +1) AS HOUR
FROM ANIMAL_OUTS

중간 단계를 보기 위해서, 위까지 작성하면 HOUR 컬럼만 출력이 되고, HOUR는 0부터 무한히 출력됩니다.

여기서 추가로

WHERE @HOUR < 23

조건을 추가해주면 HOUR는 23까지만 출력이 되겠습니다.

 

그리고 추가로, 그룹별로 COUNT한 컬럼을 추가하기위해서, 서브쿼리를 뒤에 넣어줍니다. (SELECT 뒤의 인자에 괄호 한의 SELECT문)

 

그리고 서브쿼리로 들어가있는 SELECT 문에서 @HOUR의 변수를 조건에 넣으면 GROUPING 과 같은 효과를 얻을 수 있습니다.

해당 문법이 생소한 문법이라 공부가 필요하겠습니다.

반응형
저작자표시 비영리 (새창열림)

'Database > SQL' 카테고리의 다른 글

[SQL][프로그래머스 고득점KIT] IS NULL  (0) 2022.08.02
[SQL][프로그래머스 고득점KIT] SUM, MAX, MIN  (0) 2022.07.20
[SQL][프로그래머스 고득점KIT] SELECT  (0) 2022.07.20
[SQL] 프로그래머스 SQL 고득점Kit 소개  (0) 2022.07.20
'Database/SQL' 카테고리의 다른 글
  • [SQL][프로그래머스 고득점KIT] IS NULL
  • [SQL][프로그래머스 고득점KIT] SUM, MAX, MIN
  • [SQL][프로그래머스 고득점KIT] SELECT
  • [SQL] 프로그래머스 SQL 고득점Kit 소개
Giken
Giken
𝐒𝐲𝐬𝐭𝐞𝐦.𝐨𝐮𝐭.𝐩𝐫𝐢𝐧𝐭𝐥𝐧("𝐇𝐞𝐥𝐥𝐨 𝐖𝐨𝐫𝐥𝐝!");
  • Giken
    개발자 기켄
    Giken
  • 전체
    오늘
    어제
    • 분류 전체보기 (148)
      • Programming Language (26)
        • C (3)
        • C++ (2)
        • Java (19)
      • Web (4)
      • Database (1)
        • SQL (5)
      • Spring (10)
      • PHP (7)
      • Linux (1)
      • Server (1)
      • Infra (3)
      • Algorithm (74)
        • 백준 (71)
        • 프로그래머스 (0)
      • 프로젝트 (2)
      • Etc (8)
      • 낙서 (5)
  • 블로그 메뉴

    • GitHub
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    평년
    SQL
    SQL고득점키트
    9498
    백준
    1330
    C
    프로그래머스
    윤년
    2753
    2588
    DB
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Giken
[SQL][프로그래머스 고득점KIT] GROUP BY
상단으로

티스토리툴바