우선 쿼리문을 어떻게 정리해야 할지 고민이던중 프로그래머스에 코딩연습 하듯이 쿼리문도 연습할 수 있게 마련해놓았다. 풀면서 몇 가지 새롭게 익히게된 문법을 정리해보겠다.
GROUP BY는 같은 값을 그룹시키는 것이다. 집계 함수(Count, Max, Min, Sum, Avg)
와 함께 사용 된다.
SLECT COLUMN_NAME
FROM TABLE_NAME
WHERE CONDITION
GROUP BY COLUMN_NAME
여기서 조건절을 추가할 때 WHERE와 HAVING이 있는데, WHERE는 그룹화 하기 전이고 HAVING은 그룹화 후에 조건이다.
HAVING은 집계 함수
에 조건을 넣을 수 있다.
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;
날짜와 시간 표현에 대해서 정리해보자.
#현재 시간(GMT)이 나온다.
SELECT NOW();
# 2022-08-30 07:52:35
#날짜만
SELECT DATE (NOW());
# 2022-08-30
#시간만
SELECT TIME (NOW());
# 08:07:53
#년도만
SELECT YEAR (NOW());
# 2022
#월만
SELECT MONTH (NOW());
# 8
#날짜 포맷을 지정할 수있다. 대소문자 주의
SELECT DATE_FORMAT(NOW(), '%Y-%M-%D');
# 2022-August-30th
SELECT DATE_FORMAT(NOW(), '%y-%m-%d');
# 22-08-30
# 예를 들어'2022-08-30' 형식으로 가져오고 싶으면 다음과 같이 할 수 있다.
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');
# 2022-08-30
Column값이 Null인 경우를 처리해준 함수이다. IFNULL, CASE, COALESCE 와 같은 함수들이 있다고 한다. Oracle에서는 NVL()과 비슷한 기능을 한다고 한다.
SELECT IFNULL(COLUMN_NAME, "대체할 값") FROM TABLE_NAME;
SQL-IF문과 비슷하지만 여러 조건을 갖으며, 첫 번째부터 조건이 맞으면 지정한 return값을 갖는다.
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN condition3 THEN result3
ELSE result
END;
[[MySQL] 그룹화하여 데이터 조회 (GROUP BY), [확장형 뇌 저장소:티스토리]]
[SQL GROUP BY Statement, w3school]