admin

SQL ORDER BY多列

sql

我想按两列对我的产品表进行排序:prod_priceprod_name

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

这里的排序方式如何?我认为这首先发生prod_price,然后发生prod_name。另外,以上查询与此查询有何不同:

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

我的产品表如下:

CREATE TABLE Products
(
  prod_id    char(10)      NOT NULL ,
  vend_id    char(10)      NOT NULL ,
  prod_name  char(255)     NOT NULL ,
  prod_price decimal(8,2)  NOT NULL ,
  prod_desc  text          NULL 
);

阅读 191

收藏
2021-05-10

共1个答案

admin

ORDER BY按第一列进行排序,然后按指定语句中的每个其他列进行排序。

例如,考虑以下数据:

Column1    Column2
=======    =======
1          Smith
2          Jones
1          Anderson
3          Andrews

查询

SELECT Column1, Column2 FROM thedata ORDER BY Column1, Column2

首先将按中的所有值排序 Column1

然后对列进行排序Column2以产生此结果:

Column1    Column2
=======    =======
1          Anderson
1          Smith
2          Jones
3          Andrews

换句话说,首先按Column1顺序对数据进行排序,然后按第二列的顺序对每个子集(Column1具有1其值的行)进行排序。

您发布的两个语句之间的区别是,第一个语句中的行将首先按prod_price(价格顺序,从最低到最高)排序,然后再按名称顺序排序(这意味着如果两个项目的价格相同,则一个名称的较低alpha值将首先列出),而第二个将仅按名称顺序排序(这意味着价格将基于prod_name不考虑价格的顺序出现)。

2021-05-10