、、、などのGROUP BY
集計関数を使用するSQLクエリの最後に句を含める必要があることはわかっています(理由はわかりませんが)。count
sum
avg
SELECT count(userID), userName
FROM users
GROUP BY userName
他にいつGROUP BY
役立つと思いますか、そしてパフォーマンスへの影響は何ですか?
、、、などの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
GROUP BY が DISTINCT よりも優れている点は、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は、レコードが返される前にセット全体にデータを強制的に入力します(暗黙的な並べ替えであるため)。
そのため(および他の多くの理由)、サブクエリでGroupByを使用しないでください。
タグが使用された回数を数えることは、グーグルの例かもしれません:
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とSUMですべての売上高をグループ化するか、各月の売上高をAVGすることができます。