SQL - Group By と Order By
こんにちは、SQLの熱望者たち!今日は、SQLの2つの必須句を掘り下げます:Group ByとOrder By。あなたの近所の親切なコンピュータ教師として、これらの概念をガイドするのを楽しみにしています。プログラミングが初めての方も心配しないでください - 基礎から始めて少しずつ進めていきます。では、コーヒー(または、あなたが好きなお茶)を飲みながら、私たちのSQL冒険の始まりましょう!
SQLのGroup By句
Group Byとは?
Group By句は、データの助手的な整理者のようなものです。 imagine you have a messy closet full of clothes. Group Byは、特定の特性に基づいて衣服をきれいな山に並べるのを助けてくれます - 色や衣服の種類などです。
SQLの言葉では、Group Byは、1つまたは複数の列に基づいてデータをグループ化します。これは、これらのグループに対して計算や摘要を行いたいときに特に便利です。
基本的な構文
Group By句の基本的な構造は以下の通りです:
SELECT column1, column2, aggregate_function(column3)
FROM table_name
GROUP BY column1, column2;
以下のように分解します:
- 我们 SELECT 了我们想要在结果中看到的列。
- 我们指定了我们从中获取数据的 TABLE。
- GROUP BY 部分は、SQLにどの列を使用してグループ化するかを告诉します。
例1: 商品ごとの販売をグループ化
想象一下,我们有一个名为 sales
的表,其中包含以下列:product_name
、quantity_sold
、sale_date
。让我们按产品对销售进行分组:
SELECT product_name, SUM(quantity_sold) as total_sold
FROM sales
GROUP BY product_name;
このクエリは以下のように動作します:
-
product_name
とquantity_sold
の合計をSELECTします。 - 我们的数据 FROM
sales
テーブルから取得しています。 -
product_name
でGROUP BYするので、SQLは各ユニークな商品に対してグループを作成します。
結果は以下のようになるかもしれません:
product_name | total_sold |
---|---|
Apple | 150 |
Banana | 200 |
Orange | 175 |
例2: 複数の列ごとのグループ化
複数の列でグループ化することもできます。让我们按产品和日期对销售进行分组:
SELECT product_name, sale_date, SUM(quantity_sold) as daily_total
FROM sales
GROUP BY product_name, sale_date;
このクエリは以下のように動作します:
-
product_name
、sale_date
、およびquantity_sold
の合計をSELECTします。 - 我们的数据 FROM
sales
テーブルから取得しています。 -
product_name
とsale_date
でGROUP BYするので、SQLは各商品と日付に対してグループを作成します。
SQLのOrder By句
Order Byとは?
Group Byがクローゼットの整理者であるなら、Order Byは衣服を軽い順から重い順、または短い順から長い順に並べるようなものです。データを特定の順序で並べることについてです。
基本的な構文
Order By句の基本的な構造は以下の通りです:
SELECT column1, column2
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC];
- ASCは昇順(最も小さいから最も大きい、またはAからZ)を意味します。
- DESCは降順(最も大きいから最も小さい、またはZからA)を意味します。
- 指定しない場合、SQLはデフォルトでASCを假定します。
例3: 販売数順に商品を並べる
让我们按总销售额对产品进行排序:
SELECT product_name, SUM(quantity_sold) as total_sold
FROM sales
GROUP BY product_name
ORDER BY total_sold DESC;
このクエリは以下のように動作します:
- 商品ごとに販売をGROUP BYします。
- 各商品の販売数量の合計を計算します。
- 結果を高から低に並べます。
結果は以下のようになるかもしれません:
product_name | total_sold |
---|---|
Banana | 200 |
Orange | 175 |
Apple | 150 |
例4: 複数の列ごとの並べ替え
複数の列で並べ替えることもできます:
SELECT product_name, sale_date, SUM(quantity_sold) as daily_total
FROM sales
GROUP BY product_name, sale_date
ORDER BY product_name ASC, daily_total DESC;
このクエリは以下のように動作します:
- 商品と日付ごとに販売をGROUP BYします。
- まず商品名でアルファベット順に並べ替えます。
- 次に、各商品グループ内で日別の合計(高から低)に並べ替えます。
Group ByとOrder Byの比較
Group ByとOrder Byを実際に見てきましたので、比較してみましょう:
特性 | Group By | Order By |
---|---|---|
目的 | データをグループ化 | データを特定の順序で並べる |
使用 | 集計関数と一緒に使用 | 集計関数を使用するかどうか問わずに使用可能 |
結果 | 行数を減少(摘要) | 行数は変更されません |
位置 | クエリ内でORDER BYの前にきます | グループ化が存在する場合はGROUP BYの後ろにきます |
機能性 | 集計計算のためのグループを作成 | 出力行の順序を決定 |
Group Byを使用すべき場合
以下の場合にGroup Byを使用します:
- データを摘要(合計や平均を取得など)したいとき。
- データグループに対して計算を行いたいとき。
- 結果セットの行数を減らしたいとき。
Order Byを使用すべき場合
以下の場合にOrder Byを使用します:
- 結果を特定の順序(昇順または降順)で並べ替えたいとき。
- データをより読みやすく、論理的な順序で表示したいとき。
- データセットの最上位または最下位の値を見つけたいとき。
例5: Group ByとOrder Byを組み合わせる
最後の例で、すべてを合わせてみましょう。假设我们想要找到每个月销售前三名的产品:
SELECT
EXTRACT(MONTH FROM sale_date) as month,
product_name,
SUM(quantity_sold) as total_sold
FROM
sales
GROUP BY
EXTRACT(MONTH FROM sale_date), product_name
ORDER BY
month ASC, total_sold DESC
LIMIT 3;
このクエリは以下のように動作します:
- 月と商品ごとに販売をGROUP BYします。
- 各商品の各月の販売数量の合計を計算します。
- 結果を月(昇順)と販売数量(降順)で並べ替えます。
- 各月の上位3つの商品に限定します。
そして、ここでGroup ByとOrder Byの旅は終わりです!練習は完璧を生むので、これらの句を自分のクエリで実験してみてください。幸せなSQLコーディングを、そしてデータは常に整理されて、完璧に並べ替えられてください!
Credits: Image by storyset