Jawaban:
Gunakan HAVING
, bukan WHERE
klausa, untuk perbandingan hasil agregat.
Mengambil kueri pada nilai nominal:
SELECT *
FROM db.table
HAVING COUNT(someField) > 1
Idealnya, harus ada GROUP BY
definisi untuk penilaian yang tepat dalam HAVING
klausa, tetapi MySQL mengizinkan kolom tersembunyi dari GROUP BY ...
Apakah ini dalam persiapan untuk kendala unik someField
? Sepertinya itu harus ...
someField
nilai bukan null atau hasil kosong jika tidak.
SELECT username, numb from(
Select username, count(username) as numb from customers GROUP BY username ) as my_table
WHERE numb > 3
Anda juga dapat melakukan ini dengan bergabung sendiri:
SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk
Ini dia:
SELECT Field1, COUNT(Field1)
FROM Table1
GROUP BY Field1
HAVING COUNT(Field1) > 1
ORDER BY Field1 desc
Satu arah
SELECT t1.*
FROM db.table t1
WHERE exists
(SELECT *
FROM db.table t2
where t1.pk != t2.pk
and t1.someField = t2.someField)
Seperti yang dikatakan OMG Ponies, klausa memiliki adalah apa yang Anda cari. Namun, jika Anda berharap bahwa Anda akan mendapatkan baris diskrit daripada ringkasan ("memiliki" membuat ringkasan) - ini tidak dapat dilakukan dalam satu pernyataan. Anda harus menggunakan dua pernyataan dalam kasus itu.
Saya memberikan contoh pada Group By antara dua tabel di Sql:
Select cn.name,ct.name,count(ct.id) totalcity
from city ct left join country cn on ct.countryid = cn.id
Group By cn.name,ct.name
Having totalcity > 2
Bagi saya, Tidak memiliki grup dengan hanya mengembalikan hasil kosong. Jadi saya kira memiliki grup untuk pernyataan memiliki cukup penting
Juga harus disebutkan bahwa "pk" harus menjadi bidang kunci. Gabung mandiri
SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk
oleh Bill Karwin memberi Anda semua catatan yang duplikat yang saya inginkan. Karena beberapa memiliki lebih dari dua, Anda bisa mendapatkan rekaman yang sama lebih dari sekali. Saya menulis semua ke tabel lain dengan bidang yang sama untuk menyingkirkan catatan yang sama dengan penekanan bidang kunci. Saya mencoba
SELECT * FROM db.table HAVING COUNT(someField) > 1
di atas dulu. Data yang dikembalikan darinya hanya memberikan satu duplikat, kurang dari 1/2 dari apa yang diberikan kepada Anda tetapi hitungannya baik jika itu yang Anda inginkan.
GROUP BY
pasti (kecuali ini adalah beberapa hal non standar MySQL)?