DB. MySQL 5. グループ化

3772 ワード

グループ関数


リンクテキスト

1. GROUP BY


関数の説明GROP BY条件による統計値の取得
ex1)
SELECT Country FROM Customers;

同国同姓
ex 1-1)GROP BYの適用
SELECT Country FROM Customers
GROUP BY Country;

ひと塊
ex 2)応用
SELECT
  ProductID, Quantity
FROM OrderDetails;

上記のデータを同じProductIDでグループ化し、数量値を加算します.
ex 2-1)GROUP BYの適用
SELECT
  ProductID, 
  SUM(Quantity) AS QuantitySum
FROM OrderDetails
GROUP BY ProductID
ORDER BY QuantitySum DESC;

ProductIDは同じものを組み合わせて数量値を加算し、カラム名をQuantitySumとし、合計の降順で並べ替えます.

2. WITH ROLLUP


関数説明WITH ROLLUP合計(*ORDER BYとは併用できません)
ex1)
SELECT
  Country, COUNT(*)
FROM Suppliers
GROUP BY Country
WITH ROLLUP;


国の数とその合計を表示します.

3. HAVING


関数説明HAVINGパケットデータのフィルタリング
ex1)
SELECT
  Country, COUNT(*) AS Count
FROM Suppliers
GROUP BY Country
HAVING Count >= 3;

表示される値はCountryの3以上です.

*WHEREとHAVINGの違い


WHEREはパケット前にデータをパケット化することができ、HAVINGはパケット後に条件によってデータを抽出することができる.
ex2) WHERE
SELECT
COUNT(*) AS Count, OrderDate
FROM Orders
WHERE OrderDate > DATE('1996-12-31')
GROUP BY OrderDate;

1996−12−31より大きいデータ、すなわち最新のデータは、OrderDate間でグループ化される.
ex2-1) HAVING
SELECT
COUNT(*) AS Count, OrderDate
FROM Orders
WHERE OrderDate > DATE('1996-12-31')
GROUP BY OrderDate
HAVING Count > 2;

パケットデータに条件を付けて、2より大きいデータのみを表示します.

4. DISTINCTE


除去関数説明DISTINCTEでの繰返し値
特定のカラムの重複のみを削除します.
GROUP BYより軽いです.
ex1)
SELECT DISTINCT CategoryID FROM Products;

*GROUP BYとは異なり、ソートされないため、高速です。


ex2)
SELECT COUNT DISTINCT CategoryId
FROM Products;

GROUP BYとは異なり、統計関数とは併用されません。


ex 3)GROUP BYとの併用
SELECT
  Country,
  CITY
FROM Customers
ORDER BY Country;

現在のCustomersテーブルのColumCountry、CITYのデータ値です.
ex 3-1)GROUP BYを使用
SELECT
  Country,
  COUNT(CITY)
FROM Customers
GROUP BY Country;

GROUP BYでCountryを重複せずに組み合わせた後、CITYの数を見ると、アルゼンチンのCITYの数は3です.
ex 3-2)DISTINCT使用
SELECT
  Country,
  COUNT(DISTINCT CITY)
FROM Customers
GROUP BY Country;

CITYの価格は重複して削除され、アルゼンチンのCITYの数は1です.