按功能从MySQL中选择最常用的值 - MySQL

时间:2014-07-12 20:00:29

标签: mysql

我在Mac上使用Sequel Pro,并且有一个这样的表:

Table1
a        b
Blah     5
Blah     5
Smoog    5
Choop    7
Choop    7
Choop    7
Smap     7
Smap     7
Tweep    11
Tweep    11
Florg    11

我正在运行此查询:

Select "MOST FREQUENT OCCURRENCE"(a), b 
From Table1
Group by b

我为“最常见的发生”提供了什么样的经营者?部分?基本上我想要做的是弄清楚" a"最经常发生在每个" b"。输出应如下所示:

"MOST FREQUENT OCCURRENCE"(a)    b
Blah                             5
Choop                            7
Tweep                            11

谢谢!

1 个答案:

答案 0 :(得分:2)

不是我见过的最漂亮的查询,但它确实有效。请记住,大型数据集可能会很慢。任何类型的计数通常都是。

SELECT cnts1.a AS a, cnts1.b AS b FROM 
(SELECT a, b, COUNT(*) cnt 
        FROM Table1 t1 
        GROUP BY a, b
      ) AS cnts1
LEFT JOIN
(SELECT a, b, COUNT(*) cnt 
        FROM Table1 t1 
        GROUP BY a, b
      ) AS cnts2
ON cnts1.b = cnts2.b
AND cnts1.cnt < cnts2.cnt
WHERE cnts2.a IS NULL

编辑:

对于非常复制 - 不友好的另一种选择只执行一次计数。不是计算每个a的出现次数,而是查看哪个a具有最大计数,而是为每个a计算一个字符串,该字符串由出现次数加上值组成a本身。之后,您将获得最大字符串,从中提取a的值。

由于在构造字符串时必须用零填充计数,因此该查询可以处理的最大出现次数有限制,例如99999(填充到5位数)。

SELECT SUBSTRING(cnta, 6) AS a, b
FROM (SELECT b, MAX(cnta) cnta
      FROM (SELECT b, CONCAT(LPAD(COUNT(*), 5, '0'), a) cnta
            FROM table1
            GROUP BY a, b
            ) cnts
      GROUP BY b
      ) maxcnts