我有以下MySQL查询:
SELECT *
FROM products
WHERE catalog = 1
GROUP BY style
ORDER BY name ASC
limit 0, 100
由于我有多个具有相同“样式”的产品,因此这将返回有关具有特定“样式”的第一个产品的信息(通过GROUP BY条件)。
因为某些产品具有“折扣”,所以我的问题如下:我如何做到“按样式分组”条件将具有折扣的产品放在首位?我的最终目标是使用1个查询,而不是在查询返回的每种样式之后,检查是否有折扣商品
如果我指定“ GROUP BY样式,折扣”,它将返回2个具有相同样式的产品:1个带有折扣,1个没有折扣。这不是我需要的东西-我只需要返回一种匹配(唯一)样式,但优先选择那些具有此折扣的匹配该样式的项目。
最佳答案
您不能在单个查询的分组集中强加优先级。您可以在应用GROUP BY之前通过使用WHERE来限制结果,但这只会剥离不满足WHERE条件的行的结果。要在分组集中查找订单,请使用如下查询:(假设id是此处的主键)
SELECT p.* FROM
( SELECT style,max(discount) as highest_discount
FROM products
WHERE catalog = 1
GROUP BY style ) p1
JOIN products p
ON p.id =
( SELECT pu.id
FROM products pu
WHERE pu.catalog = 1
AND pu.style = p1.style
AND pu.discount = p1.highest_discount
LIMIT 1 )
关于mysql - 如何在“GROUP BY”语句上施加条件-MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5835382/