按条件排序

时间:2015-05-26 11:14:57

标签: mysql sql sorting

我想在字段的功能中更改order by子句,但我不知道它是否可能。

以下是一个例子:

**TABLE DISCOUNTS**
category    offer
A           0
B           0
C           1
D           1
F           0

product_id  category    price
       1      A         100
       2      B         300
       3      C         250
       4      C         150
       5      D         200
       6      B         200
       7      F         250

我愿意选择已经订购的所有产品,首先如果它们是要约(我想首先显示优惠),之后我想按类别对它们进行分组并按价格排序。

问题在于优惠,这里按类别分组并不重要,因为不会提供太多优惠,更有意义的是直接按价格排序。

所以这是我得到的输出:

product_id  category    price       offer
4            C          150         1
3            C          250         1
5            D          200         1
1            A          100         0
6            B          200         0
7            F          250         0
2            B          300         0

虽然我想获得不同的订单(仅按价格排序):

product_id  category    price       offer
4            C          150         1
5            D          200         1
3            C          250         1
1            A          100         0
6            B          200         0
2            B          300         0
7            F          250         0

我使用的查询是:

select * from Products p
left join Discounts d on p.category = d.category
order by offer desc, p.category, price 

这是fiddle

这里最好的选择是什么? 感谢。

2 个答案:

答案 0 :(得分:4)

我认为您只需要从category

中删除order by
select *
from Products p left join
     Discounts d
     on p.category = d.category
order by offer desc,
         (case when offer = 0 then category end),
         price ;

答案 1 :(得分:3)

据我了解,您希望按价格订购优惠,非优惠按类别订购,然后按价格订购。在这种情况下,您可以使用IF来有条件地订购:

select * from Products p
left join Discounts d on p.category = d.category
order by offer desc,IF(offer,price,p.category), p.category, price