带列过滤器的mysql分组查询
我有一个mysql表,其中包含下面提到的数据,列为C1、C2和C3。表数据如下所述(保密后的虚拟数据)。我想要一个mysql查询,它将通过C1降序(首先获得最大计数C1)返回所有C1列顺序的计数,其中最大计数desc和C1的C2数据具有重复的最大次数,与C3相同带列过滤器的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
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吗。基本思想是减少查询执行时间。