我想按两列对我的产品表进行排序:prod_price
和prod_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
);
答案 0 :(得分:33)
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
按顺序显示,而不考虑价格)。
答案 1 :(得分:6)
结果按第一列排序,然后是第二列,依此类推,因为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。
答案 2 :(得分:1)
是的,排序是不同的。
ORDER BY
列表中的项目按顺序应用
以后的项目只订购上一步剩下的同行。
为什么不尝试?
答案 3 :(得分:1)
这取决于数据库的大小。
SQL基于SET理论:查询表时没有固有的顺序。
因此,如果您要运行第一个查询,它将首先按产品价格和产品名称排序,如果价格类别中有任何重复项,例如20美元,则会根据其名称对这些重复项进行排序,因此,在运行查询时始终保持这一点,它将始终以相同的顺序返回相同的结果集。
如果您要运行第二个查询,它只会按名称排序,所以如果有两个名称相同的产品(由于某些奇怪的原因),那么在运行查询后它们将没有保证订单
答案 4 :(得分:1)