+++++++++++++ Start line ++++++++++++++++
1.データのグループ化
サプライヤ1003から提供された製品の数を返します
mysql> SELECT COUNT(*) AS num_prods
-> FROM products
-> WHERE vend_id =1003;
2、グループを作成する
mysql> SELECT vend_id, COUNT(*) AS num_prods
-> FROM products
-> GROUP BY vend_id;
GROUP BYの規定について1.
GROUP BY句には任意の数の列を含めることができます
。2.グループはGROUP BY句にネストされ、データは最後に指定されたグループに要約されます。3. GROUP BY句は
文にリストされていますの各列は、検索列または有効な式である必要があります
。4.集計計算ステートメントを除き、SELECTステートメントの各列は、GROUP BY句で指定する必要があります
。5.グループにNULL値がある場合、NULLグループで返却いたします。
6. GROUP BY句は、WHERE句の後、ORDER BY句の前に置く必要があります。
3、フィルターグループ
HAVINGはすべてのWHERE演算子をサポートします
WHERE句の条件とオプションはHAVINGに適用可能で、構文は同じですが、キーワードが異なります
mysql> SELECT cust_id, COUNT(*) AS orders
-> FROM orders
-> GROUP BY cust_id
-> HAVING COUNT(*) >= 2;
HAVINGとWHEREの違い
データのグループ化前のWHEREフィルター、データのグループ化後のHAVINGフィルター
価格が10以上の製品が3つ以上あるサプライヤーをリストする
mysql> SELECT vend_id, COUNT(*) AS num_prods
-> FROM products
-> WHERE prod_price >= 10
-> GROUP BY vend_id
-> HAVING COUNT(*) >= 2;
mysql> SELECT vend_id,COUNT(*) AS num_prods
-> FROM products
-> GROUP BY vend_id
-> HAVING COUNT(*) >= 2;
4、グループ化とソート
合計注文価格が50以上の注文の注文番号と合計注文価格を取得する
mysql> SELECT order_num, SUM(quantity*item_price) AS ordertotal
-> FROM orderitems
-> GROUP BY order_num
-> HAVING SUM(quantity*item_price) >= 50;
合計注文価格で出力を並べ替える
mysql> SELECT order_num, SUM(quantity*item_price) AS ordertotal
-> FROM orderitems
-> GROUP BY order_num
-> HAVING SUM(quantity*item_price) >= 50
-> ORDER BY ordertotal;
5、SELECT句の順序
SELECT-FROM-WHERE-GROUP BY(グループの説明)-HAVING(グループレベルのフィルタリング)-ORDER BY-LIMIT
+++++++++++++ End line ++++++++++++++++