Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL按多列排序_Mysql_Sql_Sql Order By - Fatal编程技术网

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