我需要实现以下目标并在此过程中遇到问题。 情况如下:
product
-----------------------------
id sku is_top name
-----------------------------
1 aaa 1 Item 1
2 bbb 0 Item 2
3 ccc 1 Item 3
4 ddd 1 Item 4
5 eee 1 Item 5
product_price
-----------------------------
product_id price type
-----------------------------
1 1.23 regular
1 1.01 special
2 3.34 regular
3 3.45 regular
4 2.67 regular
5 5.55 regular
product_wholesale_price
-----------------------------
product_id price minimum_count
-----------------------------
1 1.12 10
1 0.95 25
2 2.12 40
3 3.00 40
5 4.00 30
product_special_price
-----------------------------
product_id price customer_id
-----------------------------
1 1.00 7
2 2.00 20
3 2.50 45
订购需要像这样:
所以理想的结果顺序是:
在单个查询中甚至可以做到这样吗?
答案 0 :(得分:0)
使用此:
ORDER BY (is_top = 1 AND type = 'special') DESC, is_top DESC, price DESC
当条件为真时,值为1
,否则为0
,因此使用条件表达式作为DESC
排序条件会先放置符合条件的行。
答案 1 :(得分:0)
SELECT p.id, p.name, MAX(pp.price) FROM product p
INNER JOIN product_price pp
ON p.id=pp.product_id
LEFT OUTER JOIN product_special_price psp
ON p.id=psp.product_id
GROUP BY p.id, p.name
ORDER BY MAX(p.is_top AND pp.type='special') DESC,
MAX(p.is_top AND psp.price IS NULL) DESC,
MAX(pp.price) DESC;
此外,如果您想要从几个不同的列中获得最高价格,在select(以及ORDER BY)而不是MAX(pp.price)
中,您可以编写类似GREATEST(MAX(pp.price), MAX(COALESCE(psp.price,0)))
的内容。