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

SQL: query maximum number of distinct values grouping by multiple columns

对于由三列(A、B、C)组成的 table,我想执行以下操作。对于 A 列的每个不同值,我想找到 B 的值,为此我拥有最不同的 C 值。因此,我需要先按 A 分组,然后按 B 分组,然后计算 C 的不同值这些组并找到最大值。但是,我无法找出 group by、max、count distinct 等的正确组合来实现这一点。

这在 MySQL 中是一个难题,因为它不支持 window 函数或 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;