使用mySQL,我有一个表,其中有许多行与产品。每个产品都有名称,库存量和上次购买日期的列。我希望获得结果,其中库存量超过0的所有产品按名称排序(此组首先),然后所有库存量为0的产品按上次购买排序。因为两个订单定义,我不能使用UNION。以下是一些可以更好理解的数据:
表格数据
名称|股票|上次购买
-----------------------------
产品1 | 0 | 2014年9月20日
产品2 | 10 | 2014年9月20日
产品3 | 0 | 2014年9月26日
产品4 | 10 | 2014年9月20日
产品5 | 0 | 2013-08-18
需要的结果:
产品2 | 10 | 2014年9月20日
产品4 | 10 | 2014-09-20 ...这些库存超过零的名称ASC
产品1 | 0 | 2014年9月26日
产品3 | 0 | 2014年9月20日
产品5 | 0 | 2013-08-18 ...这些是上次购买DESC的空库存订单
由于分页,我需要它作为一个结果。
答案 0 :(得分:1)
只需使用具有多个条件的order by
子句:
order by (stock > 0) desc,
(case when stock > 0 then name end) asc,
(case when stock = 0 then lastpurchase end) desc;
答案 1 :(得分:0)
只需将条件添加到ORDER BY
:
select *
from data
order by stock > 0 desc,
if(stock>0,name,null) asc,
if(stock>0,null,lastpurchase) desc