【问题标题】:MySQL count occurrences greater than 2MySQL 计数出现大于 2
【发布时间】:2010-10-14 20:31:22
【问题描述】:

我有如下表结构

+  id  +  word  +
+------+--------+

表格被给定文本的小写单词填满,所以文本

你好,再见

会导致

+  id  +  word  +
+------+--------+
+   1  + hello  +
+------+--------+
+   2  + bye    +
+------+--------+
+   3  + hello  +
+------+--------+

我想做一个 SELECT 查询,它会返回表中至少重复两次的单词数(比如你好)

SELECT COUNT(id) FROM words WHERE (SELECT COUNT(words.word))>1

当表很大时,这当然是错误的和超级重载。关于如何实现这一目的的任何想法?在上面给出的示例中,我希望 1

【问题讨论】:

  • 还有其他人看到下划线像“下垂”的索桥吗?

标签: mysql


【解决方案1】:

要获取出现多次的单词列表及其出现频率,请使用 GROUP BY 和 HAVING 的组合:

SELECT word, COUNT(*) AS cnt
FROM words
GROUP BY word
HAVING cnt > 1

要查找上述结果集中的单词数,请将其用作子查询并计算外部查询中的行数:

SELECT COUNT(*)
FROM
(
    SELECT NULL
    FROM words
    GROUP BY word
    HAVING COUNT(*) > 1
) T1

【讨论】:

  • 只是一个插件,您也可以在“拥有”中使用别名。与 SELECT words 一样,COUNT(*) AS cnt FROM words GROUP BY word HAVING cnt > 1
【解决方案2】:
SELECT count(word) as count 
FROM words 
GROUP BY word
HAVING count >= 2;

【讨论】:

  • CodeIgniter 也支持拥有,所以这是完美的。谢谢
【解决方案3】:

SELECT word, COUNT(*) FROM words GROUP by word HAVING COUNT(*) > 1

【讨论】:

    【解决方案4】:

    HAVING 选项可用于此目的,查询应该是

    SELECT word, COUNT(*) FROM words 
    GROUP BY word
    HAVING COUNT(*) > 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      相关资源
      最近更新 更多