1. GROUP BY - 조건에 따라 집계된 값을 가져온다.
-- Country에 무슨 값이 있는지 확인
SELECT Country FROM Customers
GROUP BY Country;
-- CategoryID에 무슨 값이 있는지 확인
SELECT CategoryID FROM Products
GROUP BY CategoryID;
여러 컬럼을 기준으로 그룹화할 수도 있다.
-- Country와 City의 조합이 겹치지 않는 것들을 보여준다.
SELECT
Country, City,
CONCAT_WS(', ', City, Country)
FROM Customers
GROUP BY Country, City;
그룹 함수 활용하기
-- OrderDate마다 몇 개의 값이 있는지 확인 가능하다.
SELECT
COUNT(*), OrderDate
FROM Orders
GROUP BY OrderDate;
-- 각 PorductID마다 개수의 합이 몇 개인지 확인 가능하고 내림차순으로 정렬
SELECT
ProductID,
SUM(Quantity) AS QuantitySum
FROM OrderDetails
GROUP BY ProductID
ORDER BY QuantitySum DESC;
WITH ROLLUP - 전체의 집계값
-- COUNT로 추출되는 각 값들의 총합이 마지막 행에 표출된다.
SELECT
Country, COUNT(*)
FROM Suppliers
GROUP BY Country
WITH ROLLUP;
⚠️ ORDER BY 와는 함께 사용될 수 없다.
HAVING - 그룹화된 데이터 걸러내기
SELECT
Country, COUNT(*) AS Count
FROM Suppliers
GROUP BY Country
HAVING Count >= 3;
WHERE는 그룹하기 전 데이터, HAVING은 그룹 후 집계에 사용한다.
SELECT
COUNT(*) AS Count, OrderDate
FROM Orders
WHERE OrderDate > DATE('1996-12-31')
GROUP BY OrderDate
HAVING Count > 2;
2. DISTINCT - 중복된 값들을 제거한다.
GROUP BY와 달리 집계함수가 사용되지 않는다.
GROUP BY와 달리 정렬하지 않으므로 더 빠르다.
-- 위의 GROUP BY를 사용한 쿼리와 결과 비교하였을 때
-- 중복이 안는 것은 같지만 출현 순서대로 표출되어 정렬되어 있지 않다.
SELECT DISTINCT CategoryID
FROM Products;
-- 오류 발생, 집계함수가 사용되지 않는다.
SELECT COUNT DISTINCT CategoryID
FROM Products;
GROUP BY와 DISTICT 함꼐 활용
-- Country마다 그룹핑하여 겹치지 않는 CITY가 몇 개가 있는지 추출
SELECT
Country,
COUNT(DISTINCT CITY)
FROM Customers
GROUP BY Country;
'프로그래밍 강의 메모 > 갖고노는 MySQL 데이터베이스 by 얄코' 카테고리의 다른 글
SELECT 더 깊이 파보기 > JOIN - 여러 테이블 조립하기 (0) | 2022.05.04 |
---|---|
SELECT 더 깊이 파보기 > 쿼리 안에 서브쿼리 (0) | 2022.05.03 |
SELECT 기초 > 시간/날짜 관련 및 기타 함수들 (0) | 2022.05.01 |
SELECT 기초 > 숫자와 문자열을 다루는 함수들 (0) | 2022.05.01 |
SELECT 기초 > 각종 연산자들 (0) | 2022.04.30 |