我想更改字段功能中的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
这里最好的选择是什么?谢谢。
据我了解,您只希望报价按价格排序,而非报价则按类别排序,然后按价格排序。在这种情况下,您可以使用IF条件订单:
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