質問

が必要であることはわかっています (理由はわかりませんが) 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 でグループ化し、すべての売上収益を合計したり、各月の売上数を平均して集計したりできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top