Jumlah MySQL terjadi lebih dari 2

94

Saya memiliki struktur tabel berikut

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

Tabel akan diisi dengan kata-kata di huruf kecil dari teks tertentu, jadi teksnya

Halo selamat tinggal halo

akan menghasilkan

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

Saya ingin membuat kueri SELECT yang akan mengembalikan jumlah kata yang diulang setidaknya dua kali dalam tabel (seperti halo)

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

yang tentu saja sangat salah dan sangat membebani saat meja besar. Ada ide tentang bagaimana mencapai tujuan tersebut? Dalam contoh yang diberikan di atas, saya mengharapkan 1

fabjoa
sumber
Adakah yang melihat garis bawah seperti jembatan tali yang "kendur"?
tetesan

Jawaban:

233

Untuk mendapatkan daftar kata yang muncul lebih dari satu kali beserta frekuensi kemunculannya, gunakan kombinasi GROUP BY dan HAVING:

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

Untuk menemukan jumlah kata dalam kumpulan hasil di atas, gunakan itu sebagai subkueri dan hitung baris di kueri luar:

SELECT COUNT(*)
FROM
(
    SELECT NULL
    FROM words
    GROUP BY word
    HAVING COUNT(*) > 1
) T1
Mark Byers
sumber
1
Hanya sebuah addon, Anda juga dapat menggunakan alias dalam "memiliki". Seperti kata PILIH, JUMLAH (*) AS cnt DARI kata KELOMPOK DENGAN kata MEMILIKI cnt> 1
Vaibhav Jain
18
SELECT count(word) as count 
FROM words 
GROUP BY word
HAVING count >= 2;
bot403
sumber
CodeIgniter juga mendukung, jadi ini sempurna. Terima kasih
Memenangkan Jun Bae
6

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

a1ex07
sumber