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同一张表,两个不同的顺序的主要内容,如果未能解决你的问题,请参考以下文章