概要: このチュートリアルでは、MySQL の HAVING
句を使用して、行のグループや集約のフィルタ条件を指定する方法を学びます。
MySQL HAVING句の紹介
HAVING
SELECT
ステートメントで、行や集約のグループに対するフィルタ条件を指定するために使用されます。
HAVING
GROUP BY
GROUP BY
HAVING
WHERE
句と同様の動作をします。
以下にHAVING
句の構文を示します:
Code language: SQL (Structured Query Language) (sql)SELECT select_listFROM table_nameWHERE search_conditionGROUP BY group_by_expressionHAVING group_condition;
この構文では、HAVING
句で条件を指定します。
HAVING
WHERE
句は個々の行にフィルタ条件を適用することに注意してください。
MySQLはHAVING
FROM
WHERE
SELECT
GROUP BY
ORDER BY
LIMIT
節の前です。
HAVING
SELECT
GROUP BY
節の後に評価されます。MySQL HAVING句の例
ここでは、HAVING
orderdetails
テーブルを使用します。
以下では、GROUP BY
句を使用して注文番号を取得しています。
orderdetails
テーブルから注文番号、注文ごとの販売数、それぞれの売上合計を取得します。
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumber;
試してみましょう
さて。 では、以下のようにHAVING
1000
よりも大きいかを調べることができます。
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000;
試してみる
HAVING
OR
AND
などの論理演算子を使って、複雑な条件を構成することができます。
次の例では、HAVING
1000
600
以上のアイテムを含む注文を検索します。
Code language: SQL (Structured Query Language) (sql)SELECT ordernumber, SUM(quantityOrdered) AS itemsCount, SUM(priceeach*quantityOrdered) AS totalFROM orderdetailsGROUP BY ordernumberHAVING total > 1000 AND itemsCount > 600;
Try It Out
例えば、出荷済みのステータスで、合計金額が1500以上のすべての注文を検索したいとします。 orderdetails
orders
INNER JOIN
status
total
集約に条件を適用することができます。
Code language: SQL (Structured Query Language) (sql)SELECT a.ordernumber, status, SUM(priceeach*quantityOrdered) totalFROM orderdetails aINNER JOIN orders b ON b.ordernumber = a.ordernumberGROUP BY ordernumber, statusHAVING status = 'Shipped' AND total > 1500;
Try It Out
句は、GROUP BY
HAVING
句を使用して、今月、今四半期、または今年の総売上高が10Kを超える注文数を求めるような質問に答えることができます。
このチュートリアルでは、MySQL の HAVING
GROUP BY
句を使用して、行のグループや集約に対してフィルタ条件を指定する方法を学びました。
- このチュートリアルは役に立ちましたか?
- YesNo