0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

集計関数とグループ化とUNION

Last updated at Posted at 2023-09-07

はじめに

集計関数とグループ化とUNIONについてのメモ

参考

集計関数

SUM、MAX、MIN、AVG

結果表が凸凹になってはいけない

  • 日付は複数の日付で行が出力されるが、金額はSUMされているので、1つの行しか出力されないのでエラーになる
  • 集計関数を使うと結果は必ず1行になる
select 日付, SUM(金額) From 家計簿

グループ化

  • GROUP BY
  • テーブルをグループに分割する
  • select項目は定数、集約関数、GROUP BY で指定した列名しか指定できない

グループ化して集計する際の順番

SELECT 項目、集計関数
FROM テーブル
(WHERE 絞り込み条件)
GROUP BY 項目

検索(WHEREによる絞り込み) -> グループごとに検索結果を分類 -> 各グループを集計

複数の列によるグループ化

GROUP BY A、B

  • まずAでグループ化して、Aはグループ化しているので、重複のない一意なものになる。
  • このときにBはまだグループ化していないので、重複がある。
  • 次に、そのグループ化したものに対して、Bでグループ化する。Bも重複のない結果表になり、AとBで一意な結果になる。
  • すなわち、結果セットの中で、同じAとBの組み合わせを持つ行は1つだけになります。

元表

A B
1 1 100
1 1 200
1 2 50
2 1 150
2 2 300
2 2 300
SELECT A, B, SUM() as 合計 FROM テスト GROUP BY A, B

結果表
AとBで一意な行だけが残る

A B 合計
1 1 300
1 2 50
2 1 150
2 2 600

UNION

  • SELECT文の結果セットをマージする(和集合)
  • 各テーブルは列数とデータ型を一致させないといけない
  • UNIONはテーブル同士を縦方向に連結。結合は横方向に連結
  • 使いどころ
    • 1つのテーブルに格納されたデータを複数の異なる条件で抽出したい場合
    • 異なるテーブルでも、列数とデータ型を一致させていれば、1つのSQLで抽出できる

UNINONとUNION ALLの違い

UNIONUNION ALL の違いは、UNION が重複行の除去処理を行う点にあります。この重複行の除去処理がオーバーヘッドとなり得ます。一方、UNION ALL はこの処理を行わないため、原則として性能面で有利です。

SELECT文をネストする(サブクエリを使用する)場合

SELECT文をネストする(サブクエリを使用する)場合、最上位のSELECT文は通常サブクエリの結果セットをさらにフィルタリングや変換するために使用

-- サブクエリ内でUNIONを使って結果を結合し、その結果から特定の列を選択してフィルタリングする場合
SELECT SUM(columnA) FROM (
    SELECT column1 AS columnA, column2 AS columnB FROM table1
    UNION
    SELECT columnA, columnB FROM table2
) AS subquery_alias;
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?