일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- MySQL
- 입출력
- 클래스
- 자바스크립트
- BufferedReader
- 메서드
- select문
- 프론트엔드
- Linux
- 백준
- 자바
- html
- JavaScript
- 웹개발
- String클래스
- 정보처리기사필기요약
- github
- Java
- mybatis
- order by
- 프로그래머스 SQL
- 백엔드
- 프로그래밍
- 정보처리기사
- scanner
- Git
- DML
- 개발자
- StringBuilder
- where
- 데이터 조회
- 예외처리
- 알고리즘
- sql문
- 리눅스
- 프로그래머스 sql 고득점 kit
- 형변환
- select
- SQL
- 스프링
- Today
- Total
ToBe끝판왕
[ 프로그래머스 / SQL ] GROUP BY - 입양 시각 구하기(2) 본문
입양 시각 구하기(2)
Programmers의 SQL 고득점 Kit
GROUP BY 문제
▶ 해당 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/59413
정답 및 풀이
▶ GROUP BY 절
• 데이터들을 원하는 그룹으로 나눌 수 있다.
• 나누고자 하는 그룹의 칼럼명을 SELECT절과 GROPU BY절 뒤에 추가하면 된다.
• FROM절과 WHERE절 뒤에 온다.
• 집계함수와 함께 사용되는 상수는 GROUP BY절에 추가하지 않아도 된다.
• GROUP BY 절
SELECT 컬럼명, 그룹함수
FROM 테이블명
GROUP BY 그룹대상;
▶ HAVING 절
• GROUP BY 절을 통해 그룹을 짓고, 각 그룹에 조건을 부여할 때 사용한다.
• GROUP BY 절 다음에 위치한다.
• HAVING 절
SELECT 컬렴명, 그룹함수
FROM 테이블명
GROUP BY 그룹대상
HAVING 그룹함수 포함 조건;
※ WHERE 절과 HAVING 절 차이
• WHERE 절은 모든 개별 행에 조건을 줄 수 있다 하지만 HAVING 절은 GROUP BY 된 이후 특정한 그룹의
행에만 조건을 줄 수 있다.
• 집계함수는 HAVING절과 함께 사용할 수 있지만 WHERE 절은 HAVE절에 포함된 하위 쿼리에 있지 않으면
집계함수랑 함께 사용할 수 없다.
• HAVING절은 GROUP BY 절 뒤에 사용하고 WHERE 절은 앞에 사용한다
※ 집계함수
▶ HOUR 함수
해당 시간을 알려주는 시간 관련 함수이다.
SELECT HOUR( 시간 );
▶ 정답
• 입양 시각 구하기(1) 문제와 다른 점은 모든 시간대 ( 0시 ~ 23시 )를 조회해야 한다.
• 단순하게 GROUP BY만 사용하여 조회한다면, 7시 ~ 19시 를 제외하고는 나오지 않는다.
왜냐하면 예시에 나머지 시간은 개수가 0이기 때문이다.
• 문제는 0시 ~ 23시를 조회하는 것이므로 데이터베이스에 없는 시간까지 해서 0시 ~ 23시를 만들어야 한다.
따라서, 테이블을 먼저 만들어야 한다.
SET @HOUR = -1;
SELECT ( @HOUR := @HOUR +1 ) AS HOUR
FROM ANIMAL_OUTS
WHERE @HOUR < 23;
=> @HOUR 변수에 -1을 할당하고 22까지 1을 더하고 HOUR이름으로 보여지게 한다.
=> 위 SQL문을 입력하고 프로그래머스에서 코드실행을 하면 0 ~ 23이 뜨는것을 알수 있다.
=> HOUR 테이블이 완성되었다.
• HOUR은 구했기 때문에 각 시간대별 입양 횟수 COUNT를 마저 구해야 한다.
SET @HOUR = -1;
SELECT ( @HOUR := @HOUR +1 ) AS HOUR,
( SELECT COUNT( HOUR( DATETIME ) )
WHERE HOUR( DATETIME ) = @HOUR ) AS COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23;
=> 최종 정답 SQL 문
=> ANIMAL_OUTS 테이블에서 입양일의 시간이 HOUR변수와 같을때
개수를 세고 열을 COUNT로 보여지게 하여 결과물을 만들어낸다.
※ SET 명령어
쿼리문에서 변수를 사용하기 위해서 SET 명령을 사용하고 변수 앞에는 @이 붙는다.
변수에 값을 할당하기 위해서는 = 또는 := 기호를 사용한다.
// 변수 선언, 값 대입
SET @변수명 = 변수값;
// 변수 출력
SELECT @변수이름;
'■ 프로그래밍 SKILLS > SQL' 카테고리의 다른 글
[ 프로그래머스 / SQL ] JOIN - 있었는데요 없었습니다 (0) | 2022.06.12 |
---|---|
[ 프로그래머스 / SQL ] JOIN - 없어진 기록 찾기 (0) | 2022.06.12 |
[ 프로그래머스 / SQL ] GROUP BY - 입양 시각 구하기(1) (0) | 2022.06.11 |
[ 프로그래머스 / SQL ] GROUP BY - 동명 동물 수 찾기 (0) | 2022.06.11 |
[ 프로그래머스 / SQL ] GROUP BY - 고양이와 개는 몇마리 있을까 (0) | 2022.06.11 |