我想在字段的功能中更改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
这里最好的选择是什么? 感谢。
答案 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