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?

SQL集計と結合 基礎 #2

Posted at

特定のカラムの合計を出したい時

GROUP BY と SUM の組み合わせを利用する

例えばこんな場面で使える

・カテゴリごとに売上がいくらかを集計したい
・部門別に給与総額を知りたい
・日別にどれだけ売れたかを見る

SELECT カラム1, SUM(合計を出したいカラム) AS 合計を出したいカラムを命名する
FROM テーブル
GROUP BY カラム1;
SELECT category, SUM(sales) AS total_sales
FROM Products
GROUP BY category;

テーブルの行数を数えたい(集計)したい時

COUNT(*) を使う

例えばこんな場面で使える

・テーブルの全レコード件数を数える(※WHEREを付けなくても良い)
・20歳以上のユーザー人数が知りたいとき(条件に合うカラムの総数を知りたい)
・特定のカラムに絞って数えたいとき

SELECT COUNT(*) AS 集計したいカラムを命名する
FROM テーブル
WHERE 集計したい条件;
SELECT COUNT(*) AS adult_user
FROM Users
WHERE age >= 20;

2つのテーブルを内部結合(INNER JOIN)し、必要な列を取り出したい時

※データがない(NULL)のカラムは、抽出されない

注文と商品を結合

SELECT --出力したい列を指定
    Orders.id, 
    Products.name, 
    Orders.quantity
FROM Orders --出力したいカラムが存在するテーブル
INNER JOIN Products
    ON Orders.product_id = Products.id --両者のテーブルで一致しているもので結合する
ORDER BY Orders.id ASC; --昇順で並べたい列を指定

・Orders(注文)テーブルと Products(商品)テーブルを結合
・出力:注文ID・商品名・注文数
・利用シーン:注文ごとにどの商品が何個買われたかを一覧化したいとき

2つのテーブルを結合し、NULLも含めたカラムを抽出したいとき

LEFT JOINを使う

SELECT Employees.name, Items.item_name
FROM Employees
LEFT JOIN Items
  ON Employees.id = Items.owner_id;
--出力結果
name   | item_name
Suzuki | Laptop
Sato   | Tablet
Tanaka | NULL

おまけ

※出力したい列名を命名したいとき、 "AS 命名したい列名"にする
SELECT
テーブル1.カラム1 AS 命名したい列名,
テーブル2.カラム1 AS 命名したい列名

※テーブルを結合し、特定の列を基準に昇順で出力したい場合
ORDER BY 基準にしたいカラム ASC; を最後に書く

※平均以上のデータを出力したい場合
WHERE テーブル1.カラム2 >= (SELECT AVG(テーブル1.カラム2) FROM テーブル1)

SQL豆知識

SQL には多数の 予約語(keywords) があり、これをカラム名やテーブル名に使うとエラーや混乱のもとになる

###💡 カラム名に避けたい代表的な単語

1. 集計・関数系

  • count
  • sum
  • avg
  • min
  • max

👉 集計関数と同名なので誤認識されやすい


2. SQL の構文で使う単語

  • select
  • from
  • where
  • order
  • group
  • by
  • as

👉 これらは文法に必須なので、カラム名にするとほぼ確実にエラー


3. データ型や制御に関する単語

  • int
  • char
  • date
  • time
  • user
  • index
  • key
  • constraint
  • check

👉 DB内部の型や制約で使われる単語


4. 特定DBでよくトラブルになる単語

  • limit(MySQL)
  • offset(PostgreSQL, MySQL)
  • rownum(Oracle)
  • identity(SQL Server)
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?