CodeGym /課程 /SQL SELF /真實任務中資料格式化與排序的範例

真實任務中資料格式化與排序的範例

SQL SELF
等級 6, 課堂 3
開放

資料排序和格式化是很重要的技能,可以幫你準備易讀的報表、優化資料分析流程,還能讓用戶體驗更好。這些技巧在你做分析報表、準備資料匯出,或日常跟資料庫打交道時都超有用。實際上你常常會遇到要把資料排得美美的、去掉重複紀錄,還有把資訊排序好讓大家一看就懂。今天我們就來搞定這些事!

範例 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_name 跟 last_name 合併成一個 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. 建立 formatted_order_date 欄位,把訂單日期變成 DD-MM-YYYY 格式。
  2. 刪掉重複的客戶和日期紀錄(只留唯一的 customer_name 跟 order_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

我們的目標:

  • 把名字和姓氏合併成一個 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" 學生資料被合併成一行,排序則是先依姓氏、再依生日。

實作練習

用今天學到的東西來解這個題目:

題目:你有一個 products 資料表,內容如下:

product_id category product_name price
1 電子產品 手機 50000
2 服裝 外套 8000
3 電子產品 筆電 70000
4 服裝 外套 8000
  1. 建立 formatted_product 欄位,把 product_name 跟類別用減號連起來,例如:手機 - 電子產品。
  2. 刪掉重複的 product_name 和 category 組合。
  3. 依類別排序,再依價格從低到高排序商品。

下面是這題的查詢結構範例:

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

試著自己想像一下這個查詢會產生什麼結果吧!

用 CONCAT()、DISTINCT 跟 ORDER BY 這些功能,可以讓資料超好讀又有結構,這在真實專案和任務裡超級重要。多練習這些組合,確保你真的懂怎麼用!

2
任務
SQL SELF, 等級 6, 課堂 3
上鎖
格式化與排序學生列表
格式化與排序學生列表
2
任務
SQL SELF, 等級 6, 課堂 3
上鎖
唯一訂單與客戶格式化
唯一訂單與客戶格式化
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION