Contagem de ocorrências de MySQL maiores que 2


91

Eu tenho a seguinte estrutura de tabela

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

A tabela é preenchida com as palavras em caixa baixa de um determinado texto, então o texto

Ola tchau ola

resultaria em

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

Quero fazer uma consulta SELECT que retornará o número de palavras que são repetidas pelo menos duas vezes na tabela (como olá)

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

o que é muito errado e sobrecarregado quando a mesa é grande. Alguma ideia de como atingir esse objetivo? No exemplo fornecido acima, eu esperaria 1


Alguém mais vendo os sublinhados como uma ponte de corda "flácida"?
gota de

Respostas:


227

Para obter uma lista das palavras que aparecem mais de uma vez junto com a frequência com que ocorrem, use uma combinação de GROUP BY e HAVING:

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

Para encontrar o número de palavras no conjunto de resultados acima, use isso como uma subconsulta e conte as linhas em uma consulta externa:

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

1
Apenas um addon, você também pode usar o alias em "ter". Como SELECT palavras, COUNT (*) AS cnt FROM palavras GRUPO POR palavra HAVING cnt> 1
Vaibhav Jain

17
SELECT count(word) as count 
FROM words 
GROUP BY word
HAVING count >= 2;

CodeIgniter também suporta ter, então isso foi perfeito. Obrigado
Ganhou Jun Bae em

6

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.