SQL:查询按多列分组的最大不同值数

时间:2015-11-14 18:58:14

标签: mysql sql mysql-variables

对于包含三列(A,B,C)的表,我想执行以下操作。对于A列的每个不同值,我想找到B的值,我有最大的C值。所以,我需要先用A分组,然后用B分组然后再计算C的不同值。那些群体并找到最大值。但是,我无法找出group by,max,count distinct等的正确组合来实现这一目标。

1 个答案:

答案 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;