admin

以条件为条件的顺序

sql

我想更改字段功能中的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

这是sqlfiddle

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


阅读 160

收藏
2021-06-07

共1个答案

admin

据我了解,您只希望报价按价格排序,而非报价则按类别排序,然后按价格排序。在这种情况下,您可以使用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
2021-06-07