Numero di occorrenze MySQL superiori a 2


91

Ho la seguente struttura della tabella

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

La tabella viene riempita con le parole in minuscolo di un dato testo, quindi il testo

Ciao ciao ciao

risulterebbe in

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

Voglio fare una query SELECT che restituisca il numero di parole che vengono ripetute almeno due volte nella tabella (come ciao)

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

che ovviamente è così sbagliato e super sovraccarico quando il tavolo è grande. Qualche idea su come raggiungere tale scopo? Nell'esempio fornito sopra, mi aspetterei 1


Qualcun altro vede le sottolineature come un ponte di corda "cadente"?
gocciolina

Risposte:


227

Per ottenere un elenco delle parole che compaiono più di una volta insieme alla frequenza con cui ricorrono, usa una combinazione di GROUP BY e HAVING:

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

Per trovare il numero di parole nel set di risultati sopra, usalo come sottoquery e conta le righe in una query esterna:

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

1
Solo un addon, puoi usare anche l'alias in "avere". Come le parole SELEZIONATE, COUNT (*) COME cnt FROM parole GROUP BY word HAVING cnt> 1
Vaibhav Jain

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

CodeIgniter supporta anche l'avere, quindi è stato perfetto. Grazie
Ha vinto Jun Bae il

6

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.