我有以下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/

10-11 22:22
查看更多