【问题标题】:SQL select same table, two different ordersSQL select同一张表,两个不同的顺序
【发布时间】: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

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

【问题讨论】:

    标签: mysql sql


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 2021-09-07
        • 1970-01-01
        • 2014-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-18
        • 1970-01-01
        相关资源
        最近更新 更多