sqlクリーンアップ!!


GROUP BY

SELECT Country, City, CONCAT_WS(', ',City,Country)
FROM Customers
GROUP BY Country, City;
このようにGROUP BYをすると、国も都市も縛られます.
  • CONCAT WS(「区切り文字」、文字列、文字列):区切り文字で文字列を結合します.
  • SELECT
      ProductID, Sum(Quantity) AS QuantitySum
    FROM OrderDetails
    GROUP BY ProductID
    ORDER BY QuantitySum DESC
    
    ProductIDパケットを使用すると、対応するPoductIDの数の和を求めることができる.
    SELECT
      Country, COUNT(*)
    FROM Suppliers
    GROUP BY Country
    WITH ROLLUP;
    WITH ROLLUPを使用すると、最後の行に要約を出力できます.しかしこれはORDER BYとは併用できません

    HAVINGセクションを使用した条件の追加


    groupbyで組み合わせた結果値を条件出力できます.
    whereパケットの前にhaveを用いてパケット後の統計->where条件文を条件文に先に打ってgroupbyを打つ場合は、where条件を先に打ってgroupby文を書けばよい.
    SELECT
      CategoryID,
      MAX(Price) AS MaxPrice, 
      MIN(Price) AS MinPrice,
      TRUNCATE((MAX(Price) + MIN(Price)) / 2, 2) AS MedianPrice,
      TRUNCATE(AVG(Price), 2) AS AveragePrice
    FROM Products
    WHERE CategoryID > 2
    GROUP BY CategoryID
    HAVING
      AveragePrice BETWEEN 20 AND 30
      AND MedianPrice < 40;

    DISTINCT


    distinctでは、集約関数は使用できません.groupbyとは異なり、ソートされていないので、速度が速いです.order byでソートできます.