Mysql SQL按多列排序
我想按两列对产品表进行排序:Mysql SQL按多列排序,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我想按两列对产品表进行排序:prod\u price和prod\u name SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price, prod_name; 这里的分拣是如何进行的?我认为它首先通过prod\u price实现,然后通过prod\u name实现。此外,上述查询与此查询有何不同: SELECT prod_id, prod_price, prod_name FROM Products ORDE
prod\u price
和prod\u name
SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price, prod_name;
这里的分拣是如何进行的?我认为它首先通过prod\u price
实现,然后通过prod\u 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
);
是的,排序是不同的
ORDER BY
列表中的项目按顺序应用。后面的项目仅对上一步留下的对等项进行排序
为什么不试试呢?这取决于数据库的大小 SQL基于集合论:查询表时没有固有的顺序 因此,如果要运行第一个查询,它将首先按产品价格订购,然后按产品名称订购,如果价格类别中有任何重复项,例如$20,它将按名称订购这些重复项,因此,始终保持在运行查询时,它将始终以相同的顺序返回相同的结果集
如果您要运行第二个查询,它将只按名称排序,因此如果有两个产品具有相同的名称(出于某些奇怪的原因),那么在您运行查询后,它们将不会有一个保证的顺序。结果按第一列排序,然后按第二列排序,依此类推,按order by子句包含的列数排序。如果希望任何结果按降序排序,order BY子句必须在相关列的名称或编号后直接使用DESC关键字 看看这个例子
SELECT first_name, last_name, hire_date, salary
FROM employee
ORDER BY hire_date DESC,last_name ASC;
它将顺序排列。首先对租用日期进行排序,然后按租用日期对其进行姓氏排序。按进行排序,排序方式是先按第一列排序,然后按指定语句中的每一列进行排序
例如,考虑以下数据:
Column1 Column2
======= =======
1 Smith
2 Jones
1 Anderson
3 Andrews
询问
SELECT Column1, Column2 FROM thedata ORDER BY Column1, Column2
将首先按第1列中的所有值进行排序
然后按Column2
对列进行排序,以生成以下结果:
Column1 Column2
======= =======
1 Anderson
1 Smith
2 Jones
3 Andrews
换句话说,数据首先按照Column1
顺序排序,然后按照第二列的顺序对每个子集(Column1
行中的1
作为其值)进行排序
您发布的两个语句之间的区别在于,第一个语句中的行将首先按prod_price
(从最低到最高的价格顺序)排序,然后按名称顺序排序(这意味着如果两个项目的价格相同,则名称的alpha值较低的项目将首先列出),而第二个将仅按名称顺序排序(这意味着价格将根据产品名称
按顺序显示,而不考虑价格)。是的,排序过程不同。
在第一个场景中,订单基于column1,除此之外,还可以根据column1对colmun2进行排序。。
在第二个场景中,它完全基于第1列进行订购。。。
请继续一个简单的例子…你会很快得到..我认为只有当prod\u price列具有相同的值时,才能按prod\u name排序,否则将按prod\u name排序。请告诉我是不是correct@user2201462:这就是peer这个词的意思。对于某个ORDER BY
项目,这些行都是相同的。只有那些才是下一项的主题。只是为了好玩(但不仅仅是为了好玩):还有另一种在DBMS中对数据进行排序的方法,它支持窗口语法:select*,count(*)over(order by Column1,Column2)from the data