记录MySQL获取每组汇总数据中按需求字段获取TOP排名数据
select * from(
select
bb.*
,(@i := CASE WHEN @name = bb.name THEN @i + 1 ELSE 1 END ) AS rownum /*先对每组赋值 组排序1*/
,(@name := bb.name) /*对每组的组排序 +1*/
from (
select
a.name
,a.product_name
,sum(a.amount) as total_amount
from
(
SELECT
`b`.`Name` /*客户分类*/
,hp.`Product_Name`
,od.`Amount`
FROM
test_table /*自己的关联表*/
) a
group by a.`name`,a.product_name
) bb
,( SELECT @i:=0, @Name:='', @productname:='' ) AS v
ORDER BY bb.Name, bb.total_amount desc
) cc where cc.rownum <= 3 /*获取前几*/
本文详细介绍了如何使用MySQL进行复杂的数据汇总,特别是如何从每组数据中选取按特定字段排名的TOP N记录。通过实际案例,展示了嵌套子查询、变量使用及排序技巧,为数据分析师和数据库开发者提供实用指南。
174万+

被折叠的 条评论
为什么被折叠?



