Bunun gibi bir şey yapmak istiyorum:
SELECT *
FROM db.table
WHERE COUNT(someField) > 1
Bunu MySql'de nasıl başarabilirim?
Yanıtlar:
Toplam sonuç karşılaştırması için HAVING, not WHEREcümlesini kullanın .
Sorguyu yüz değerinde almak:
SELECT *
FROM db.table
HAVING COUNT(someField) > 1
İdeal olarak, cümlecikte GROUP BYuygun bir değerleme için tanımlanmış olmalıdır HAVING, ancak MySQL, GROUP BY ...
Bu, benzersiz bir kısıtlamaya hazırlık olarak someFieldmı? Görünüşe göre olmalı ...
someFielddeğer içeriyorsa tüm tabloyu veya yoksa boş bir sonuç kümesini döndürür .
SELECT username, numb from(
Select username, count(username) as numb from customers GROUP BY username ) as my_table
WHERE numb > 3
Bunu kendi kendine katılma ile de yapabilirsiniz:
SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk
Hadi bakalım:
SELECT Field1, COUNT(Field1)
FROM Table1
GROUP BY Field1
HAVING COUNT(Field1) > 1
ORDER BY Field1 desc
Tek yön
SELECT t1.*
FROM db.table t1
WHERE exists
(SELECT *
FROM db.table t2
where t1.pk != t2.pk
and t1.someField = t2.someField)
OMG Ponies'in belirttiği gibi, sahip olmak, peşinde olduğunuz şeydir. Ancak, bir özet yerine ayrı satırlar elde edeceğinizi umuyorsanız ("sahip olmak" bir özet oluşturur) - bu tek bir ifadede yapılamaz. Bu durumda iki ifade kullanmalısınız.
Sql'deki iki tablo arasında Group By üzerine bir örnek veriyorum:
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
Benim için, boş sonuç döndürerek bir gruba sahip olmamak. Sanırım sahip olma ifadesi için bir gruba sahip olmak oldukça önemli
Ayrıca "pk" nin anahtar alan olması gerektiğinden de bahsedilmelidir. Kendi kendine katılma
SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk
Yazan Bill Karwin size yinelenen tüm kayıtları verir ki bu da istediğim şeydi. Bazılarının ikiden fazla olması nedeniyle, aynı kaydı birden fazla kez alabilirsiniz. Anahtar alanları gizleyerek aynı kayıtlardan kurtulmak için hepsini aynı alanlara sahip başka bir tabloya yazdım. denedim
SELECT * FROM db.table HAVING COUNT(someField) > 1
önce yukarıda. Ondan döndürülen veriler, kopyalardan yalnızca birini verir, bunun size verdiğinin 1 / 2'sinden daha azıdır, ancak istediğiniz tek şey buysa sayı iyidir.
GROUP BY(bu biraz MySQL standart olmayan şey değilse) mutlaka?