掌握SQL多列排序技巧,数据分析更高效

在这里插入图片描述

按多个列排序

在数据库查询中,经常需要按不止一个列进行数据排序。例如,如果要显示雇员名单,可能希望按姓和名排序(首先按姓排序,然后在每个姓中再按名排序)。如果多个雇员有相同的姓,这样做很有用。

要按多个列排序,只需指定这些列名,列名之间用逗号分开即可(就像选择多个列时那样)。

示例

下面的检索3个列,并按其中两个列对结果进行排序——首先按价格,然后按名称排序。

输入

SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price, prod_name;

输出

prod_id | prod_price | prod_name
--------|------------|-----------
BNBG02  | 3.4900     | Bird bean bag toy
BNBG01  | 3.4900     | Fish bean bag toy
BNBG03  | 3.4900     | Rabbit bean bag toy
RGAN01  | 4.9900     | Raggedy Ann
BRO1    | 5.9900     | 8 inch teddy bear
BRO2    | 8.9900     | 12 inch teddy bear
RYL01   | 9.4900     | King doll
RYL02   | 9.4900     | Queen doll
BR03    | 11.9900    | 18 inch teddy bear

重要的是理解在按多个列排序时,排序的顺序完全按规定进行。换句话说,对于上述例子中的输出,仅在多个行具有相同的prod_price值时才对产品按prod_name进行排序。如果prod_price列中的值都是唯一的,则不会按prod_name排序。

示例

学生成绩的表Grades,如下:

CREATE TABLE Grades (
    student_id INT,
    course_id INT,
    semester VARCHAR(10),
    score DECIMAL(4, 2)
);

INSERT INTO Grades (student_id, course_id, semester, score) VALUES
(1, 101, 'Fall2023', 88.50),
(2, 101, 'Fall2023', 92.00),
(1, 102, 'Spring2024', 85.00),
(2, 102, 'Spring2024', 95.00),
(3, 101, 'Fall2023', 78.00),
(3, 102, 'Spring2024', 82.50);
  1. 按单一列排序

    • 按成绩score降序排序:
    SELECT student_id, course_id, semester, score
    FROM Grades
    ORDER BY score DESC;
    
    student_id | course_id | semester  | score
    -----------|-----------|-----------|------
    2          | 102       | Spring2024| 95.00
    2          | 101       | Fall2023  | 92.00
    1          | 101       | Fall2023  | 88.50
    1          | 102       | Spring2024| 85.00
    3          | 102       | Spring2024| 82.50
    3          | 101       | Fall2023  | 78.00
    
  2. 按多列排序

    • 先按学期semester升序排序,然后按成绩score降序排序:
    SELECT student_id, course_id, semester, score
    FROM Grades
    ORDER BY semester ASC, score DESC;
    
    student_id | course_id | semester  | score
    -----------|-----------|-----------|------
    2          | 101       | Fall2023  | 92.00
    1          | 101       | Fall2023  | 88.50
    3          | 101       | Fall2023  | 78.00
    2          | 102       | Spring2024| 95.00
    1          | 102       | Spring2024| 85.00
    3          | 102       | Spring2024| 82.50
    
  3. 按学期和课程ID排序

    • 先按学期semester升序排序,然后按课程IDcourse_id升序排序:
    SELECT student_id, course_id, semester, score
    FROM Grades
    ORDER BY semester ASC, course_id ASC;
    
    student_id | course_id | semester  | score
    -----------|-----------|-----------|------
    1          | 101       | Fall2023  | 88.50
    2          | 101       | Fall2023  | 92.00
    3          | 101       | Fall2023  | 78.00
    1          | 102       | Spring2024| 85.00
    2          | 102       | Spring2024| 95.00
    3          | 102       | Spring2024| 82.50
    
  4. 按学期、成绩和学生ID排序

    • 先按学期semester升序排序,然后按成绩score降序排序,再按学生IDstudent_id升序排序:
    SELECT student_id, course_id, semester, score
    FROM Grades
    ORDER BY semester ASC, score DESC, student_id ASC;
    
    student_id | course_id | semester  | score
    -----------|-----------|-----------|------
    2          | 101       | Fall2023  | 92.00
    1          | 101       | Fall2023  | 88.50
    3          | 101       | Fall2023  | 78.00
    2          | 102       | Spring2024| 95.00
    1          | 102       | Spring2024| 85.00
    3          | 102       | Spring2024| 82.50
    

非常感谢您读到这里!如果您觉得这篇文章对您有帮助,可以关注一下博主。关注后,您将第一时间获得最新的AI、云计算、运维(Linux、数据库,容器等)技术,以及更多实用的技能干货。


无论你是AI新手还是AI专家,学习最前沿的AI技术,AI创富俱乐部你值得拥有!

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值