SQL HAVING句
SQL HAVING句
HAVING
句がSQLに追加されました。WHERE
キーワードは集約関数では使用できません。
HAVING構文
SELECT <em>column_name(s)</em>
FROM <em>table_name</em>
WHERE <em>condition</em>
GROUP BY <em>column_name(s)
</em>HAVING <em>condition
</em>ORDER BY <em> column_name(s);</em>
デモデータベース
以下は、Northwindサンプルデータベースの"Customers"テーブルからの選択です。
顧客ID |
顧客名 |
連絡先 |
住所 |
街 |
郵便番号 |
国 |
---|---|---|---|---|---|---|
1 |
アルフレッド・フードボックス | マリア・アンダース | オベレ通り57 | ベルリン | 12209 | ドイツ |
2 | アナ・トルヒーヨ サンドイッチとアイスクリーム | アナ・トルヒーヨ | コンスティトゥシオン通り2222番地 | メキシコDF | 05021 | メキシコ |
3 | アントニオ・モレノ・タケリア | アンソニー・モレノ | マタデロス 2312 | メキシコDF | 05023 | メキシコ |
4 |
アラウンド・ザ・ホーン | トーマス・ハーディ | 120 ハノーバー スクエア | ロンドン | WA1 1DP | イギリス |
5 | バーグルンドのスーパーマーケット | クリスティーナ・ベルグルンド | ベルグフスヴァーゲン 8 | ルレオ | S-958 22 | スウェーデン |
SQL HAVINGの例
次のSQLステートメントは、各国の顧客数を一覧表示します。顧客数が5を超える国のみを含める
例
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;
次のSQLステートメントは、各国の顧客数を上位から下位に並べ替えて一覧表示します (顧客が5人を超える国のみを含めます)。
例
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;
デモデータベース
以下は、Northwindサンプルデータベースの"Orders"テーブルからの選択です。
オーダーID |
顧客ID |
従業員ID |
注文日 |
荷送人ID |
---|---|---|---|---|
10248 | 90 | 5 | 1996-07-04 | 3 |
10249 | 81 | 6 | 1996-07-05 | 1 |
10250 | 34 | 4 | 1996-07-08 | 2 |
そして、「従業員」テーブルからの選択
従業員ID |
苗字 |
ファーストネーム |
生年月日 |
写真 |
ノート |
---|---|---|---|---|---|
1 | ダヴォリオ | ナンシー | 1968-12-08 | EmpID1.pic | 学歴には学士号が含まれます。 |
2 | フラー | アンドリュー | 1952-02-19 | EmpID2.pic | アンドリューはBTSを受け取りました....。 |
3 | レバリング | ジャネット | 1963-08-30 | EmpID3.pic | ジャネットは学士号を持っています....。 |
その他のHAVINGの例
次のSQLステートメントは、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;
次のSQLステートメントは、従業員「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;
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。