MySQL中的分组查询是通过GROUP BY
子句实现的,它允许你根据一个或多个列对结果集进行分组。分组后,你可以使用聚合函数(如COUNT()
, SUM()
, AVG()
, MAX()
, MIN()
)来计算每个组的汇总信息。
HAVING
子句对分组后的结果进行过滤。假设我们有一个销售记录表sales
,结构如下:
| id | product_id | sale_date | amount | |----|------------|-----------|--------| | 1 | 101 | 2023-01-01| 100 | | 2 | 102 | 2023-01-01| 200 | | 3 | 101 | 2023-01-02| 150 | | ...| ... | ... | ... |
我们想要查询每个产品ID的前3条销售记录的总金额。
可以使用子查询结合LIMIT
和ORDER BY
来实现:
SELECT product_id, SUM(amount) as total_amount
FROM (
SELECT product_id, amount,
@row_number := IF(@current_product = product_id, @row_number + 1, 1) as row_number,
@current_product := product_id
FROM sales, (SELECT @row_number := 0, @current_product := '') as vars
ORDER BY product_id, sale_date DESC
) as subquery
WHERE row_number <= 3
GROUP BY product_id;
@row_number
和@current_product
来跟踪当前产品ID和行号。通过这种方式,你可以灵活地对数据进行分组和汇总,满足各种复杂的数据分析需求。
领取专属 10元无门槛券
手把手带您无忧上云