여러분이 사용하고 계신 브라우저는 HTML5를 지원하지 않기 때문에 몇몇 요소가 제대로 보이도록 JScript를 사용하고 있습니다. 하지만 여러분의 브라우저 설정에서 스크립트 기능이 꺼져있으므로, 현재 페이지를 제대로 확인하시려면 스크립트 기능을 켜주셔야 합니다. SQL - HAVING 절
SQL – HAVING 절
2년전 작성
9개월전 수정

HAVING

WHERE 키워드를 집계 함수와 함께 사용할 수 없기 때문에 HAVING 절이 SQL에 추가되었다.

구문

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);

데이터베이스 예시

CustomerID CustomerName ContactName Address City PostalCode Country
1

Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
4

Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

각 국가의 고객 수를 나열합니다. 고객이 5명 이상인 국가만 포함

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;
기본 예시
COUNT(CustomerID) Country
9 Brazil
11 France
11 Germany
7 UK
13 USA

각 국가의 고객 수를 높음에서 낮음으로 정렬하여 나열합니다(고객이 5명 이상인 국가만 포함)

SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;
기본 예시
COUNT(CustomerID) Country
13 USA
11 Germany
11 France
9 Brazil
7 UK

데이터베이스 예시

주문 테이블
OrderID CustomerID EmployeeID OrderDate ShipperID
10248 90 5 1996-07-04 3
10249 81 6 1996-07-05 1
10250 34 4 1996-07-08 2
직원 테이블
EmployeeID LastName FirstName BirthDate Photo Notes
1 Davolio Nancy 1968-12-08 EmpID1.pic Education includes a BA….
2 Fuller Andrew 1952-02-19 EmpID2.pic Andrew received his BTS….
3 Leverling Janet 1963-08-30 EmpID3.pic Janet has a BS degree….

10개 이상의 주문을 등록한 직원을 나열

SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM (Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID)
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 10;
기본 예시
LastName NumberOfOrders
Buchanan 11
Callahan 27
Davolio 29
Fuller 20
King 14
Leverling 31
Peacock 40
Suyama 18

직원 “Davolio” 또는 “Fuller”가 25개 이상의 주문을 등록했는지 여부를 나열

SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
WHERE LastName = 'Davolio' OR LastName = 'Fuller'
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;
기본 예시
LastName NumberOfOrders
Davolio 29
참고

Mingg`s Diary
밍구
공부 목적 블로그