3.1 GROUP BY ステートメント

SQL 言語は非常に強力です。単純なデータの取得に加えて、クエリ時にデータをグループ化することもできます。例えば、各ブランドの商品が何種類あるか知りたいのですが、どうすればよいでしょうか?

this には特別な演算子がありますGROUP BY。その書き方は次のとおりです。

GROUP BY column

各ブランドの製品タイプの数を表示するように SQL に要求するクエリを作成してみましょう。このようなリクエストは次のようになります。

SELECT brand, COUNT(*)
FROM product
GROUP BY brand

次のクエリ結果が得られます。

ブランド カウント(*)
(ヌル) 2
ボッシュ 4
イケア 6
LG 2
スマートフラワー 1

どのような要望を書いたのか、どのような結果が得られたのかをしっかり分析してみましょう。結果として、2 つの列が表示されます。最初にブランドのリストが表示されますが、これは論理的です。「ブランド --> 数量」のペアのセットのようなものを取得したいと考えていました。

ブランド名の中に という単語が含まれていることに注意してくださいNULL。確かに、それが書かれているブランドの製品がありNULL、ここでそれらが表示されます。少し予想外でしたが、役に立ちました。ノーブランドの製品がどれだけあるのかがわかります。

では、リクエストを詳しく見てみましょう。各ブランドの商品数を知りたかったので、 と書きGROUP BY brand、 にブランドと式をSELECT書きましたCOUNT(*)

COUNT(*)は、行のグループに対して実行される、いわゆる集計関数です。私たちの場合、彼女は単にその数を数えています。このような関数はたくさんありますが、それらについては後で説明します。

3.2 GROUP BY を使用した複雑なクエリ

次に、価格が 10 未満の製品を最初に破棄し、それらをグループ化するクエリを作成してみましょう。このようなリクエストは次のようになります。

SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand

次のクエリ結果が得られます。

ブランド カウント(*)
ボッシュ 4
イケア 5
LG 2
スマートフラワー 1

非常に安かったため、すべての NULL 製品が結果表から消え、IKEA 製品の数が 1 つ減少しました。6 つから 5 つになりました。

これは、最初にフィルターに必要な行を適用しWHERE、その後で結果にグループ化を適用することを示唆しています。

3.3 結果の列名

ちなみに、結果の列に名前を付けることができます。サーバーがどのように名前を提案したかわかりますかcount(*)? 合計に置き換えてみましょう。このようなリクエストは次のようになります。

SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand

次のクエリ結果が得られます。

ブランド 合計
ボッシュ 4
イケア 5
LG 2
スマートフラワー 1

既存の列の名前を変更することもできます。以前に使用したクエリの 1 つを取得し、列に新しい名前を追加してみましょう。

SELECT
id AS  product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL

次のクエリ結果が得られます。

製品番号 商品名 価格
2 椅子 5.00
8 ランプ 15.00