SQL ORDER BY多列

use*_*462 21 mysql sql sql-order-by

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

SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price, prod_name;
Run Code Online (Sandbox Code Playgroud)

如何在这里完成排序?我认为它首先发生prod_price,然后发生prod_name.此外,上述查询与此不同如何:

SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_name;
Run Code Online (Sandbox Code Playgroud)

我的产品表如下:

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 
);
Run Code Online (Sandbox Code Playgroud)

Ken*_*ite 35

在a中排序ORDER BY由第一列完成,然后由指定语句中的每个附加列完成.

例如,请考虑以下数据:

Column1    Column2
=======    =======
1          Smith
2          Jones
1          Anderson
3          Andrews
Run Code Online (Sandbox Code Playgroud)

查询

SELECT Column1, Column2 FROM thedata ORDER BY Column1, Column2
Run Code Online (Sandbox Code Playgroud)

首先按照所有值排序 Column1

然后对列进行排序Column2以生成以下内容:

Column1    Column2
=======    =======
1          Anderson
1          Smith
2          Jones
3          Andrews
Run Code Online (Sandbox Code Playgroud)

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

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


小智 6

结果按第一列排序,然后是第二列,依此类推,因为ORDER BY子句包含的列数.如果您希望任何结果按降序排序,则ORDER BY子句必须在相关列的名称或编号后面直接使用DESC关键字.

看看这个例子

SELECT first_name, last_name, hire_date, salary 
FROM employee 
ORDER BY hire_date DESC,last_name ASC;
Run Code Online (Sandbox Code Playgroud)

它会连续订购.首先订购Hire_Date,然后通过Hire_Date订购LAST_NAME.