【问题标题】:Select most frequent value from a group by function - MySQL按函数从组中选择最频繁的值 - MySQL
【发布时间】:2014-07-13 18:08:42
【问题描述】:

我在 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

我为“最常发生”部分输入的运算符是什么?基本上我想做的是找出每个“b”最常出现的“a”。输出应如下所示:

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

谢谢!

【问题讨论】:

  • 您正在尝试获取数据库中的第一项和最后一项?不确定我是否关注了
  • 我想你只需要一个 count(a) 并按计数 DESC 排序
  • 这个表没有键。这是个问题。
  • 这些是英国下一个欧洲歌唱大赛的歌词吗?

标签: mysql


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2010-11-27
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多