首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按函数从组中选择最常用的值- MySQL

问按函数从组中选择最常用的值- MySQL
EN

Stack Overflow用户
提问于 2014-07-12 20:00:28
回答 1查看 580关注 0票数 1

我在Mac上使用了续集Pro,有一个这样的桌子:

代码语言:javascript
复制
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

我正在运行这个查询:

代码语言:javascript
复制
Select "MOST FREQUENT OCCURRENCE"(a), b 
From Table1
Group by b

“最频繁发生”部分的接线员是什么?基本上,我要做的是找出哪一个"a“最常出现在每个"b”中。输出应该如下所示:

代码语言:javascript
复制
"MOST FREQUENT OCCURRENCE"(a)    b
Blah                             5
Choop                            7
Tweep                            11

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-07-13 00:19:25

这不是我见过的最漂亮的问题,但有效。请记住,对于大型数据集来说,它可能会比较慢。任何一种计数都是。

代码语言:javascript
复制
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位数)。

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24716824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档