GROUP BY 정리
이전 포스팅([데이터베이스]SELECT)에 GROUP BY에 대한 정리가 되어있습니다 ;)
MySQL변수는 입양시각 구하기(2) 문제를 위해 따로 정리했습니다
참고해주세요..!
2021.05.09 - [CS/데이터베이스] - [데이터베이스] SELECT
2021.05.21 - [CS/데이터베이스] - [데이터베이스] MySQL 변수
GROUP BY 답
-- 고양이와 개는 몇 마리 있을까
SELECT ANIMAL_TYPE, COUNT(*) FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE
-- 동명 동물 수 찾기
-- 동물 이름 중 두번이상 쓰인 이름 AND 해당 이름이 쓰인 횟수 조회
-- 이때 결과 이름없는 동물은 제외, 결과는 이름순
SELECT NAME, COUNT(*) AS COUNT FROM ANIMAL_INS GROUP BY NAME HAVING COUNT(NAME) >= 2 ORDER BY NAME
-- 입양시각 구하기(1)
SELECT HOUR(DATETIME), COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) >= 9 AND HOUR(DATETIME) < 20 GROUP BY HOUR(DATETIME) ORDER BY HOUR(DATETIME)
-- 입양시각 구하기(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
입양시각 구하기(2) 풀이
쉽다 생각하고 풀었는데 답이 안나와서 당황했던 문제입니다😂
처음 풀이는 이랬습니다
#실패
SELECT HOUR(DATETIME), COUNT(*) FROM ANIMAL_OUTS
WHERE HOUR(DATETIME) >= 0 AND HOUR(DATETIME) < 24
GROUP BY HOUR(DATETIME)
ORDER BY HOUR(DATETIME)
그런데 COUNT가 0인건 출력이 안되더라구요,,, COUNT()는 원하는 값이 없으면 null을 출력하기 때문이었습니다
다른 분들의 풀이를 찾다가 발견한 것이 mysql 변수였습니다..! 변수에 대한 내용은 따로 정리해서 포스팅 해놨습니다😊
위에 글을 참고해주세요~
#성공
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
처음에 hour를 -1로 선언해주고 HOUR은 hour에 +1해준 값, HOUR(DATETIME)과 hour이 같아지는 때에 count 값을 COUNT로 해주었습니다
헷갈리는게 WHERE이었는데 hour를 -1로 선언해 22까지 +1씩 증가 시켜서 0~23까지 생성되어 범위를 23미만으로 설정한 것이었습니다
그럼이만 정리를 마쳐보겠습니다!