MySQL 分组查询(GROUP BY)用于将具有相同值的行组合在一起,以便对每个组执行聚合函数,如 COUNT()、SUM()、AVG() 等。通常与 HAVING 子句一起使用,以过滤分组后的结果。
假设我们有一个订单表 orders
,包含以下字段:order_id
, customer_id
, order_date
, amount
。我们希望按 customer_id
分组,并且每组只取一条记录。
直接使用 GROUP BY 子句无法实现每组取一条记录,因为 GROUP BY 会将同一组的记录合并为一条记录。
可以使用窗口函数 ROW_NUMBER()
来实现每组取一条记录。
SELECT order_id, customer_id, order_date, amount
FROM (
SELECT order_id, customer_id, order_date, amount,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date DESC) AS rn
FROM orders
) t
WHERE t.rn = 1;
ROW_NUMBER()
窗口函数,按 customer_id
分区,并按 order_date
降序排列,为每组中的记录分配一个行号。通过这种方式,你可以有效地在一个分组中取一条记录,并且可以根据具体需求调整排序和筛选条件。
领取专属 10元无门槛券
手把手带您无忧上云