我有一个表格结构,比如:
id | ex_name | att_name
10 | David | sam G&G
12 | John | mark hol
13 | John | john b
14 | Mark | john c
15 | David | mark hol
16 | David | mark hol
17 | Mark | sam G&G
18 | John | john b
19 | David | sam G&G
20 | John | sam G&G
当我使用以下查询时:
SELECT att_name
, count(att_name) as att_count
FROM `tablename`
group
by att_name
order
by att_count desc
返回:
sam G&G = 4
mark hol = 3
john b = 2
john c = 1
我想要输出的最大值,即
山姆G&G是4
与返回的列ex_name相同:
David = 4
john = 4
mark = 2
我想要ex_name列的最大值,这个列是David和John有count 4
我想要的最终结果是:
ex_name | att_name | ex_count | att_count
David Sam G&G 4 4
John 4
我也尝试在下面的查询中获取输出,但是在本例中,我得到了ex_name,att_name为空。
SELECT a.att_name,b.att_name,max(a.ex_count),max(b.att_count)
FROM application_data
INNER JOIN (
SELECT ex_name,count(ex_name) as ex_count
FROM application_data
GROUP BY ex_name
) a
INNER JOIN (
SELECT att_name ,count(att_name) as att_count
FROM application_data
GROUP BY att_count
) b
它返回:
ex_name | att_name | ex_count | att_count
NULL NULL 4 4
你能帮我吗?提前谢谢
最佳答案
似乎要按某列聚合表,然后保留共享最高计数的所有组记录。一种方法是在当前查询中添加一个HAVING
子句,该子句断言要保留的组的计数是所有组中的最高计数。
SELECT att_name, COUNT(*) AS cnt
FROM tablename
GROUP BY att_name
HAVING COUNT(*) = (SELECT COUNT(*) FROM tablename
GROUP BY att_name ORDER BY COUNT(*) DESC LIMIT 1);
Demo
关于mysql - 我们如何使用MySQL单一查询获得多列数(TOP)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54574894/