CodeGym /コース /SQL SELF /実際の課題でのデータのフォーマットとソートの例

実際の課題でのデータのフォーマットとソートの例

SQL SELF
レベル 6 , レッスン 3
使用可能

データのソートやフォーマットは、読みやすいレポートを作ったり、データ分析を最適化したり、ユーザーとのやりとりを良くするために超大事なスキルだよ。こういう知識は、分析レポートを作るときや、エクスポート用にデータを準備するとき、あと普段のDB作業でもめっちゃ役立つ。実際には、データをキレイにフォーマットしたり、重複レコードを消したり、見やすいようにソートしたりする課題にしょっちゅう出くわすんだ。今日はまさにそれをやってみよう!

例1: 苗字でソートされた、名前と苗字を結合したユニークな顧客リストの作成

customersテーブルには顧客データが入ってるよ:

id first_name last_name city
1 Alex Lin New York
2 Maria Chi Los Angeles
3 Alex Lin New York
4 Anna Song Chicago

今回のゴール:

  1. first_namelast_nameを1つのカラムfull_nameに結合する。
  2. ユニークな顧客だけを抽出する。
  3. リストを苗字(last_name)でソートする。

SQLクエリ

SELECT DISTINCT
    CONCAT(first_name, ' ', last_name) AS full_name,
    city
FROM customers
ORDER BY last_name;
full_name city
Maria Chi Los Angeles
Alex Lin New York
Anna Song Chicago

Alex Linみたいな重複レコードはDISTINCTで消えて、リスト全体は苗字順でアルファベット順にソートされてるのに注目してね。

例2: 注文データのフォーマットとソート

ordersテーブルには注文データが入ってる:

order_id customer_name order_date total_amount
1 Alex Lin 2023-10-01 1500
2 Maria Chi 2023-10-02 2000
3 Alex Lin 2023-10-03 1500
4 Anna Song 2023-10-04 3000

今回のゴール:

  1. 注文日をDD-MM-YYYY形式で表示するformatted_order_dateカラムを作る。
  2. 顧客名と注文日の重複レコードを消す(customer_nameorder_dateのユニークな組み合わせだけ残す)。
  3. 注文を日付の降順でソートする。
  4. SQLクエリ
SELECT DISTINCT
customer_name,
TO_CHAR(order_date, 'DD-MM-YYYY') AS formatted_order_date,
total_amount
FROM orders
ORDER BY order_date DESC;

結果:

customer_name formatted_order_date total_amount
Anna Song 04-10-2023 3000
Alex Lin 03-10-2023 1500
Maria Chi 02-10-2023 2000

TO_CHAR()関数で日付をDD-MM-YYYY形式に変換して、DISTINCTで重複レコードを除外してるのが分かるよね。

例3: 学生の「名前+苗字」のユニークな組み合わせを抽出し、苗字と誕生日でソート

studentsテーブルには学生データが入ってる:

student_id first_name last_name birth_date
1 Alex Lin 2001-03-15
2 Maria Chi 2000-06-20
3 Alex Lin 2001-03-15
4 Anna Song 1999-10-10

今回のゴール:

  • 名前と苗字を1つのカラムfull_nameに結合する。
  • 「名前+苗字」のユニークな組み合わせを抽出する。
  • 学生を苗字、次に誕生日でソートする。
SELECT DISTINCT
    CONCAT(first_name, ' ', last_name) AS full_name,
    birth_date
FROM students
ORDER BY last_name, birth_date;

結果:

full_name birth_date
Maria Chi 2000-06-20
Alex Lin 2001-03-15
Anna Song 1999-10-10

特に注目:「Alex Lin」の同じレコード2つは1行にまとめられて、ソートはまず苗字、次に誕生日でされてるよ。

実践課題

今日学んだことを使って、次の課題をやってみて!

課題: productsテーブルがあって、こんなデータが入ってる:

product_id category product_name price
1 Denki Terefon 50000
2 Odezhda Kurtka 8000
3 Denki Noutobuku 70000
4 Odezhda Kurtka 8000
  1. formatted_productカラムを作って、product_nameとカテゴリをハイフンで結合する(例:Terefon - Denki)。
  2. product_namecategoryの重複組み合わせを消す。
  3. 商品をカテゴリで、次に価格(安い順)でソートする。

この課題をやるためのクエリの構造はこんな感じだよ:

SELECT DISTINCT
    CONCAT(product_name, ' - ', category) AS formatted_product,
    price
FROM products
ORDER BY category, price ASC;

このクエリの結果を自分でイメージしてみて!

CONCAT()DISTINCTORDER BYみたいな関数を使うと、データがめっちゃ読みやすくて整理されるんだ。これは実際のプロジェクトや課題で超重要だから、どうやって組み合わせるかしっかり理解して、例題で練習してみてね!

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION