MySQL中的分组(GROUP BY)和排名(Ranking)是两个常用的数据处理功能。分组允许你根据一个或多个列对结果集进行分组,而排名则是对每个分组内的数据进行排序并赋予一个排名值。
SUM(), AVG(), COUNT(), MAX(), MIN()。ROW_NUMBER(), RANK(), DENSE_RANK())来实现排名。ROW_NUMBER():为每一行分配一个唯一的连续整数。RANK():为每一行分配一个排名,如果有相同的值,则排名相同,下一个排名会跳过相同的排名数。DENSE_RANK():类似于 RANK(),但不会跳过排名数。假设我们有一个销售数据表 sales,结构如下:
CREATE TABLE sales (
id INT AUTO_INCREMENT PRIMARY KEY,
product_id INT,
sale_amount DECIMAL(10, 2),
sale_date DATE
);我们希望按产品分组,计算每个产品的总销售额,并按总销售额进行排名。
SELECT
product_id,
SUM(sale_amount) AS total_sales,
RANK() OVER (ORDER BY SUM(sale_amount) DESC) AS sales_rank
FROM
sales
GROUP BY
product_id
ORDER BY
total_sales DESC;RANK(), DENSE_RANK())。GROUP BY 子句中包含了所有非聚合列。WITH ROLLUP 或 WITH CUBE 来获取更全面的分组结果。EXPLAIN 分析查询计划,优化查询性能。通过以上方法,你可以有效地使用MySQL的分组和排名功能来处理和分析数据。