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的分组和排名功能来处理和分析数据。
领取专属 10元无门槛券
手把手带您无忧上云