use*_*462 21 mysql sql sql-order-by
我想用两列对我的产品表进行排序:prod_price和prod_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.