GROUP BY - 조건에 따라 집계된 값을 가져온다
SELECT Country
FROM Customers
GROUP BY Country;
// Customers 테이블에서 Country 컬럼을 그룹화 한 뒤 Country를 SELECT한다
SELECT
Country, City,
CONCAT_WS(', ', City, Country)
FROM Customers
GROUP BY Country, City;
// 여러 칼럼을 그룹화할 수도 있다.
SELECT
COUNT(*), OrderDate
FROM Orders
GROUP BY OrderDate;
// Orders 테이블에서 OrderDate를 그룹화 하고, 그룹화한 OrderDate의 레코드들의 개수를
// COUNT(*)로 센다.
HAVING - 그룹화된 데이터 걸러내기
SELECT
Country, COUNT(*), AS Count
FROM Suppliers
GROUP BY Country
HAVING Count >= 3;
/*
Suppliers 테이블에서 Country로 그룹화 하고, 그룹화한 Country의 레코드들의 개수를
COUNT로 센 값을 Count로 지정, HAVING로 Count >= 3 (Country의 레코드가 3 이상인
것들을 걸러낸다
*/
WHERE
는 그룹하기 전 데이터, HAVING
은 그룹 후 집계에 사용한다!
SELECT
COUNT(*) AS Count, OrderDate
FROM Orders
WHERE OrderDate > DATE('1996-12-31')
GROUP BY OrderDate
HAVING Count > 2;
/*
Orders 테이블에서 '1996-12-31' 보다 큰 OrderDate를 걸러내고,
걸러낸 OrderDate들을 그룹화한 뒤, 레코드들을 전부 COUNT해서 Count로 명명,
Count가 2 이상인 것들을 나타낸다
*/
DISTINCT - 중복된 값들을 제거한다.
- GROUP BY와 달리 집계함수가 사용되지 않는다
- GROUP BY와 달리 정렬하지 않으므로 더 빠르다
SELECT DISTINCT CategoryID
FROM Productes;