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 |
GO TO FULL VERSION