SQL HAVING Clause (日本語)

HAVING句はクエリで何をするのか

HAVING句はWHEREと似ていますが、GROUP BYによって返されたグループ化されたレコードを操作するものです。
HAVINGはグループの要約レコードに適用され、WHEREは個々のレコードに適用されます。
HAVINGの条件を満たすグループのみが返されます。

HAVINGはGROUP BY句が存在することが必要です。
WHEREとHAVINGの両方を同じクエリで同時に使用することができます。

SQLのHAVING構文

一般的な構文は

SELECT column-names FROM table-name WHERE condition GROUP BY column-namesHAVING condition
ORDER BYを使った一般的な構文は以下の通りです。
SELECT column-names FROM table-name WHERE condition GROUP BY column-namesHAVING condition ORDER BY column-names

CUSTOMER

Id

FirstName

LastName

City

Country

Phone

となります。

SQL GROUP BYの例

問題です。 各国の顧客数をリストアップする。
顧客数が10人以上の国のみを対象とします。
SELECT COUNT(Id), Country FROM Customer GROUP BY CountryHAVING COUNT(Id) > 10
結果。 3件のレコード
r

td

カウント
11 フランス
11 ドイツ
13 アメリカ

CUSTOMER

Id

FirstName

LastName

City

Country

Phone

問題です。 アメリカを除く各国の顧客数を、
多い順に並べてください。
顧客数が9人以上の国のみを対象とする。
SELECT COUNT(Id), Country FROM Customer WHERE Country 'USA' GROUP BY CountryHAVING COUNT(Id) >= 9 ORDER BY COUNT(Id) DESC
結果。 3件のレコード
カウント
11 フランスtd
11 ドイツ
9 ブラジル

ORDER

Id

OrderDate

OrderNumber

CustomerId

TotalAmount

CUSTOMER

Id

FirstName

LastName

City

Country

Phone

div

問題です。 平均注文額が
1000ドルから1200ドルの顧客をすべてリストアップします。
SELECT AVG(TotalAmount), FirstName, LastName FROM O JOIN Customer C ON O.CustomerId = C.Id GROUP BY FirstName, LastNameHAVING AVG(TotalAmount) BETWEEN 1000 AND 1200
結果:10件
1107.80666

Average FirstName LastName
1081.215000 ミゲル アンヘル・パオリーノ
1063.420000 イサベル デ・カストロ
1008.440000 Alexander Feuer
1062.038461 Thomas Hardy
Pirkko Koskitalo
1174.945454 Janete Limeira
1073.621428 Antonio Moreno
1065.385000 Rita Müller
1183.010000 José Pedro Freyre
1057.386666 Carine Schmitt

iv

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です