23

我想按两列对我的产品表进行排序: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 
);
4

5 回答 5

37

在 an 中排序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不考虑价格的顺序显示)。

于 2013-03-26T02:48:25.903 回答
8

结果按第一列排序,然后是第二列,依此类推,与 ORDER BY 子句包括的列一样多。如果您希望任何结果按降序排序,您的 ORDER BY 子句必须在相关列的名称或编号之后直接使用 DESC 关键字。

看看这个例子

SELECT first_name, last_name, hire_date, salary 
FROM employee 
ORDER BY hire_date DESC,last_name ASC;

会陆续下单。首先订购 Hire_Date,然后按 Hire_Date 订购 LAST_NAME。

于 2013-03-26T02:47:59.917 回答
1

是的,排序不同。

列表中的项目ORDER BY按顺序应用。
后面的项目只对上一步剩下的对等点进行排序。

你为什么不试试呢?

于 2013-03-26T02:29:20.577 回答
1

是的,排序方式不同。在第一种情况下,基于第 1 列的订单,除此之外,还通过基于第 1 列对 colmun2 进行排序来进一步处理。在第二种情况下,它完全基于第 1 列进行排序...请继续举一个简单的例子...你会得到迅速地..

于 2014-02-19T03:28:16.317 回答
1

这取决于您的数据库的大小。

SQL 基于 SET 理论:查询表时没有固有的顺序。

因此,如果您要运行第一个查询,它将首先按产品价格排序,然后按产品名称排序,如果价格类别中有任何重复项,例如 20 美元,它将按名称对这些重复项进行排序,因此始终维护当您运行查询时,它将始终以相同的顺序返回相同的结果集。

如果您要运行第二个查询,它只会按名称排序,因此如果有两个具有相同名称的产品(出于某种奇怪的原因),那么在您运行查询后它们将不会有保证的顺序。

于 2013-03-26T02:43:09.803 回答