코드 그라데이션
[얄코] MySQL 1-5.조건에 따라 그룹으로 묶기 본문
1. GROUP BY
- 조건에 따라 집계된 값을 가져온다.
1)
SELECT Country FROM Customers
GROUP BY Country;
실행 결과
2)
SELECT CategoryID FROM Products
GROUP BY CategoryID;
실행 결과
여러 컬럼을 기준으로 그룹화할 수도 있다.
SELECT
Country, City,
CONCAT_WS(', ', City, Country)
FROM Customers
GROUP BY Country, City;
실행 결과
* 그룹 함수 활용하기
1)
SELECT
COUNT(*), OrderDate
FROM Orders
GROUP BY OrderDate;
실행 결과
2)
SELECT
ProductID,
SUM(Quantity) AS QuantitySum
FROM OrderDetails
GROUP BY ProductID
ORDER BY QuantitySum DESC;
실행 결과
3)
SELECT
CategoryID,
MAX(Price) AS MaxPrice,
MIN(Price) AS MinPrice,
TRUNCATE((MAX(Price) + MIN(Price)) / 2, 2) AS MedianPrice,
TRUNCATE(AVG(Price), 2) AS AveragePrice
FROM Products
GROUP BY CategoryID;
실행 결과
4)
SELECT
CONCAT_WS(', ', City, Country) AS Location,
COUNT(CustomerID)
FROM Customers
GROUP BY Country, City;
실행 결과
* WITH ROLLUP - 전체의 집계값
- GROUP BY 와는 함께 사용할 수 없다.
1)
SELECT
Country, COUNT(*)
FROM Suppliers
GROUP BY Country
WITH ROLLUP;
실행 결과
HAVING - 그룹화된 데이터 걸러내기
SELECT
Country, COUNT(*) AS Count
FROM Suppliers
GROUP BY Country
HAVING Count >= 3;
실행 결과
* WHERE은 그룹하기 전 데이터, HAVING은 그룹 후 집계에 사용한다.
1)
SELECT
COUNT(*) AS Count, OrderDate
FROM Orders
WHERE OrderDate > DATE('1996-12-31')
GROUP BY OrderDate
HAVING Count > 2;
실행 결과
2)
SELECT
CategoryID,
MAX(Price) AS MaxPrice,
MIN(Price) AS MinPrice,
TRUNCATE((MAX(Price) + MIN(Price)) / 2, 2) AS MedianPrice,
TRUNCATE(AVG(Price), 2) AS AveragePrice
FROM Products
WHERE CategoryID > 2
GROUP BY CategoryID
HAVING
AveragePrice BETWEEN 20 AND 30
AND MedianPrice < 40;
실행 결과
2. DISTINCT - 중복된 값을 제거
- GROUP BY와 달리 집계함수가 사용되지 않는다.
- GROUP BY와 달리 정렬하지 않으므로 더 빠르다.
1)
SELECT DISTINCT CategoryID
FROM Products;
-- 위의 GROUP BY를 사용한 쿼리와 결과 비교
실행 결과
2)
SELECT COUNT DISTINCT CategoryID
FROM Products;
-- 오류 발생
실행 결과
3)
SELECT DISTINCT Country
FROM Customers
ORDER BY Country;
실행 결과
4)
SELECT DISTINCT Country, City
FROM Customers
ORDER BY Country, City;
실행 결과
# GROUP BY와 DISTINCT는 함께 활용도 가능하다.
SELECT
Country,
COUNT(DISTINCT CITY)
FROM Customers
GROUP BY Country;
실행 결과
728x90
'Database > SQL' 카테고리의 다른 글
[얄코] MySQL 3. MySQL 사용하기 (0) | 2023.06.11 |
---|---|
[얄코] MySQL 2-3.집합으로 다루기 (0) | 2023.06.11 |
[얄코] MySQL 1-2. 각종 연산자들 (0) | 2023.06.09 |
[얄코] MySQL Section 1-1. SELECT의 전반 기능 알아보기 (0) | 2023.06.09 |
Order by, Group by 이렇게 코드를 작성하면 편하다 (0) | 2023.02.06 |
Comments