按多个列排序

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

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

示例

下面的检索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
```
  1. 按多列排序

    • 先按学期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
```
  1. 按学期和课程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
  1. 按学期、成绩和学生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创富俱乐部你值得拥有!

本文由mdnice多平台发布


逼格高的汤圆
10 声望2 粉丝