SQL选择相同的表,两个不同的命令

时间:2014-09-26 00:49:31

标签: mysql sql

使用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的空库存订单

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

2 个答案:

答案 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