【问题标题】:SQL - Value that appears oftenSQL - 经常出现的值
【发布时间】:2013-12-21 08:11:17
【问题描述】:

我需要一个 SQL,在其中我得到的 id 出现的次数比另一个多得多……但我需要的是 id,而不是计算它创建 id 的频率……

post    | id 
==============
hello   | 2
guys    | 1
how     | 2
are     | 2

它应该给我“2”的回报。

感谢您的帮助。

【问题讨论】:

  • id 2 出现 3 次,id 1 也出现 3 次的情况,你希望它们都返回吗?如果是这样,您正在寻找 ID 的 MODE(S)

标签: php mysql


【解决方案1】:
SELECT COUNT(*) AS cnt, id
FROM <table>
GROUP BY id
ORDER BY cnt DESC
LIMIT 1

【讨论】:

  • 同样,这只会给出最大的 ID。
【解决方案2】:

你正在寻找的是所谓的模式,我做了类似的事情 Is there a simpler way to find MODE(S) of some values in MySQL

对于多于 1 种模式的情况(例如 id 2 出现 3 次,id 1 也出现 3 次)(sqlFiddle) 您可以使用以下查询之一

这将返回 id 1 和 2 作为逗号分隔的列表(当然,您必须将 yourTable 替换为您的实际表名)

SELECT GROUP_CONCAT(CASE WHEN occurs=@maxoccurs THEN value ELSE NULL END) as modes 
FROM 
    (SELECT value,occurs,@maxoccurs:=GREATEST(@maxoccurs,occurs) as maxoccurs
     FROM (SELECT id as value,count(*) as occurs
           FROM yourTable
           GROUP BY id)T1,(SELECT @maxoccurs:=0)mo
    )T2;

这个将返回 id 1 和 2 作为 2 个单独的行

SELECT value as id FROM  
  (SELECT value,occurs,@maxoccurs as maxoccurs
  FROM 
    (SELECT value,occurs,@maxoccurs:=GREATEST(@maxoccurs,occurs) as maxoccurs
     FROM (SELECT id as value,count(*) as occurs
           FROM yourTable
           GROUP BY id)T1,(SELECT @maxoccurs:=0)mo
     )T2
  )T3
WHERE occurs = maxoccurs

【讨论】:

    猜你喜欢
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多