我有一个表格结构,比如:

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/

10-09 15:19
查看更多