对于包含三列(A,B,C)的表,我想执行以下操作。对于A列的每个不同值,我想找到B的值,我有最大的C值。所以,我需要先用A分组,然后用B分组然后再计算C的不同值。那些群体并找到最大值。但是,我无法找出group by,max,count distinct等的正确组合来实现这一目标。
答案 0 :(得分:4)
这是MySQL的一个难题,因为它不支持窗口函数或CTE。也许最简单的方法是使用双重聚合和字符串技巧:
select a,
substring_index(group_concat(b order by cnt desc), ',', 1) as MostCommon
from (select a, b, count(distinct c) as cnt
from t
group by a, b
) ab
group by a;
注意:对于大数据,您需要关注中间字符串的长度。可以扩展默认长度。
另一种解决方案是使用变量:
select a, b
from (select a, b, cnt,
(@rn := if(@a = a, @rn + 1,
if(@a := a, 1, 1)
)
) rn
from (select a, b, count(distinct c) as cnt
from t
group by a, b
) ab cross join
(select @a := '', @rn := 0) params
order by a, cnt desc
) t
where rn = 1;