MySQL 分组查询(GROUP BY)用于将数据按照一个或多个列进行分组,然后对每个分组执行聚合函数(如 COUNT、SUM、AVG 等)。通常情况下,分组查询会返回每个分组的汇总结果,而不是单个记录。然而,在某些情况下,我们可能希望从每个分组中获取一条记录。
GROUP BY 子句对数据进行分组。HAVING 子句的分组查询:使用 HAVING 子句过滤分组后的结果。假设我们有一个订单表 orders,包含以下字段:order_id、customer_id、order_date、total_amount。我们希望获取每个客户的最近一笔订单。
我们可以使用子查询和窗口函数(如 ROW_NUMBER())来实现这一目标。
SELECT
customer_id,
order_date,
total_amount
FROM (
SELECT
customer_id,
order_date,
total_amount,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date DESC) AS rn
FROM orders
) subquery
WHERE rn = 1;ROW_NUMBER() 对每个客户的订单按日期降序排列,并为每个分组分配一个行号。GROUP BY?GROUP BY 子句通常用于聚合数据,而不是获取单个记录。虽然可以使用 GROUP_CONCAT 等函数获取分组内的记录,但这并不适用于所有情况。ROW_NUMBER() 或 RANK() 可以更灵活地获取每个分组中的特定记录。希望这些信息对你有所帮助!
没有搜到相关的文章