質問
が必要であることはわかっています (理由はわかりませんが) GROUP BY
次のような集計関数を使用する SQL クエリの末尾の句 count
, sum
, avg
, 、など:
SELECT count(userID), userName
FROM users
GROUP BY userName
他にいつ GROUP BY
役に立ちますか?パフォーマンスへの影響は何ですか?
解決
5 つを超えるウィジェットがある各ウィジェット カテゴリからウィジェットの数を取得するには、次のようにします。
SELECT WidgetCategory, count(*)
FROM Widgets
GROUP BY WidgetCategory
HAVING count(*) > 5
「having」句は、人々が忘れがちなものですが、代わりに、すべてのデータをクライアントに取得し、そこで反復処理することを選択します。
他のヒント
GROUP BY は、複数のレコードを 1 つにグループ化するという点で DISTINCT に似ています。
この例は、から借用しました http://www.devguru.com/technologies/t-sql/7080.asp, では、Products テーブルに個別の製品がリストされます。
SELECT Product FROM Products GROUP BY Product
Product
-------------
Desktop
Laptop
Mouse
Network Card
Hard Drive
Software
Book
Accessory
DISTINCT に対する GROUP BY の利点は、HAVING 句と一緒に使用すると、きめ細かい制御が可能になることです。
SELECT Product, count(Product) as ProdCnt
FROM Products
GROUP BY Product
HAVING count(Product) > 2
Product ProdCnt
--------------------
Desktop 10
Laptop 5
Mouse 3
Network Card 9
Software 6
Group By では、レコードが返される前にセット全体が強制的に設定されます (暗黙的な並べ替えであるため)。
そのため (および他の多くの理由)、サブクエリでは Group By を決して使用しないでください。
タグが使用された回数をカウントするのは、Google の例です。
SELECT TagName, Count(*)
AS TimesUsed
FROM Tags
GROUP BY TagName ORDER TimesUsed
単にタグの個別の値が必要な場合は、 DISTINCT
声明。
SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
GROUP BY は、大量のデータを平均または合計するレポートを生成する場合にも役立ちます。部門 ID でグループ化し、すべての売上収益を合計したり、各月の売上数を平均して集計したりできます。