SQL select同一张表,两个不同的顺序

Posted

技术标签:

【中文标题】SQL select同一张表,两个不同的顺序【英文标题】:SQL select same table, two different orders 【发布时间】:2014-09-26 00:49:30 【问题描述】:

使用 mysql,我有一张表,其中有很多包含产品的行。每个产品都有名称、库存数量和最后购买日期的列。我想得到结果,其中所有库存量超过 0 的产品按名称排序(该组优先),然后所有库存量为 0 的产品按最后一次购买排序。所以我不能使用 UNION 因为有两个订单定义。以下是一些数据以便更好地理解:

表格数据: 姓名 |库存 |上次购买 ----------------------------------------- 产品 1 | 0 | 2014-09-20 产品 2 | 10 | 2014-09-20 产品 3 | 0 | 2014-09-26 产品 4 | 10 | 2014-09-20 产品 5 | 0 | 2013-08-18

需要的结果: 产品 2 | 10 | 2014-09-20 产品 4 | 10 | 2014-09-20 ... 这些库存超过零的订单按名称 ASC 产品 1 | 0 | 2014-09-26 产品 3 | 0 | 2014-09-20 产品 5 | 0 | 2013-08-18 ...这些有空库存订单按最后一次购买DESC

由于分页,我需要它作为一个结果。

【问题讨论】:

【参考方案1】:

只需使用带有多个条件的order by 子句:

order by (stock > 0) desc,
         (case when stock > 0 then name end) asc,
         (case when stock = 0 then lastpurchase end) desc;

【讨论】:

【参考方案2】:

只需将条件添加到您的ORDER BY

select * 
from data
order by stock > 0 desc, 
    if(stock>0,name,null) asc,
    if(stock>0,null,lastpurchase) desc
SQL Fiddle Demo

【讨论】:

以上是关于SQL select同一张表,两个不同的顺序的主要内容,如果未能解决你的问题,请参考以下文章

在oracle中怎么把一张表的数据插入到另一张表中

两个Excel有一列内容相同,这一列排列顺序不一样,怎么把这两个表内容合并成一张表?

您可以强制 SQL 存储过程按给定顺序获取锁吗

mysql通过在同一张表上查询的自定义顺序

SQL SERVER 一个SQL语句的执行顺序

实体框架在同一张表中查询 WHERE 中的步骤顺序