MySQL中的GROUP BY
子句用于将具有相同值的行组合在一起,以便对每个组执行聚合函数,如SUM(), AVG(), MAX()等。而“分组取top0”通常指的是在每个分组中选择排名第一的记录。
GROUP BY
结合窗口函数(如ROW_NUMBER())来实现分组内的排序和选择。GROUP BY
无法实现“分组取top0”?GROUP BY
子句本身只负责将数据分组,并对每个组应用聚合函数。它并不直接支持在分组内进行排序和选择特定排名的记录。GROUP BY
来实现。首先,你需要为每个分组内的记录分配一个唯一的序号,然后根据这个序号选择排名第一的记录。假设我们有一个名为sales
的表,包含以下字段:product_id
, category_id
, sales_amount
。我们想找出每个类别中销售额最高的产品。
WITH RankedSales AS (
SELECT
product_id,
category_id,
sales_amount,
ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY sales_amount DESC) AS rn
FROM sales
)
SELECT
product_id,
category_id,
sales_amount
FROM RankedSales
WHERE rn = 1;
在这个示例中,我们首先使用ROW_NUMBER()
窗口函数为每个类别内的产品分配一个基于销售额降序排列的序号。然后,在外层查询中,我们选择序号为1的记录,即每个类别中销售额最高的产品。
领取专属 10元无门槛券
手把手带您无忧上云