带列过滤器的mysql分组查询

带列过滤器的mysql分组查询,mysql,sql,Mysql,Sql,我有一个mysql表,其中包含下面提到的数据,列为C1、C2和C3。表数据如下所述(保密后的虚拟数据)。我想要一个mysql查询,它将通过C1降序(首先获得最大计数C1)返回所有C1列顺序的计数,其中最大计数desc和C1的C2数据具有重复的最大次数,与C3相同 C1 C2 C3 X A U X A U X B V Y H K Y H K Y H K Z F R Z

我有一个mysql表,其中包含下面提到的数据,列为C1、C2和C3。表数据如下所述(保密后的虚拟数据)。我想要一个mysql查询,它将通过C1降序(首先获得最大计数C1)返回所有C1列顺序的计数,其中最大计数desc和C1的C2数据具有重复的最大次数,与C3相同

    C1  C2  C3
    X   A   U
    X   A   U
    X   B   V
    Y   H   K
    Y   H   K
    Y   H   K
    Z   F   R
    Z   F   P
    Z   G   P
    Z   F   R
输出应为以下格式

  Count  C1   C2  C3
  4      Z    F   P
  3      Y    H   K
  3      X    A   U

我可以在同一查询中获得计数,但不能获得C2、C3的最大重复值。

您可以尝试使用
选择
子查询进行查询

查询1

SELECT 
       COUNT(*),
       C1,
       (SELECT tt.C2 FROM T tt WHERE t1.C1 = tt.C1 GROUP BY tt.C2 ORDER BY COUNT(*) DESC,tt.C2 LIMIT 1) c2,
       (SELECT tt.C3 FROM T tt WHERE t1.C1 = tt.C1 GROUP BY tt.C3 ORDER BY COUNT(*) DESC,tt.C3 LIMIT 1) c3
FROM T t1
GROUP BY C1 
ORDER BY COUNT(*) desc,C1 desc
| COUNT(*) | C1 | c2 | c3 |
|----------|----|----|----|
|        4 |  Z |  F |  P |
|        3 |  Y |  H |  K |
|        3 |  X |  A |  U |

SELECT 
       COUNT(*),
       C1,
       (SELECT tt.C2 FROM T tt WHERE t1.C1 = tt.C1 GROUP BY tt.C2 ORDER BY COUNT(*) DESC,tt.C2 LIMIT 1) c2,
       (SELECT tt.C3 FROM T tt WHERE t1.C1 = tt.C1 GROUP BY tt.C3 ORDER BY COUNT(*) DESC,tt.C3 LIMIT 1) c3
FROM T t1
GROUP BY C1 
ORDER BY COUNT(*) desc,C1 desc
| COUNT(*) | C1 | c2 | c3 |
|----------|----|----|----|
|        4 |  Z |  F |  P |
|        3 |  Y |  H |  K |
|        3 |  X |  A |  U |

这个查询工作得很好,但执行时间更长。我们可以修改查询或使用连接来获得C2和C3吗。基本思想是减少查询执行时间。