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

fabjoa
fonte
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
Mark Byers
fonte
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;
bot403
fonte
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

a1ex07
fonte