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_namelast_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 LinDISTINCT去掉了,整个列表也按姓氏字母顺序排好了。

例子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_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

我们的目标:

  • 把名字和姓氏合并成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_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