Odpowiedzi:
Użyj klauzuli HAVING
not WHERE
, aby porównać wyniki zagregowane.
Przyjmując zapytanie za dobrą monetę:
SELECT *
FROM db.table
HAVING COUNT(someField) > 1
Najlepiej byłoby, gdyby GROUP BY
w HAVING
klauzuli zdefiniowano odpowiednią wycenę , ale MySQL zezwala na ukryte kolumny z GROUP BY ...
Czy jest to przygotowanie na wyjątkowe ograniczenie someField
? Wygląda na to, że powinno być ...
someField
wartości inne niż null lub pusty zestaw wyników, jeśli nie zawiera.
SELECT username, numb from(
Select username, count(username) as numb from customers GROUP BY username ) as my_table
WHERE numb > 3
Możesz to również zrobić za pomocą samodzielnego dołączenia:
SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk
Proszę bardzo:
SELECT Field1, COUNT(Field1)
FROM Table1
GROUP BY Field1
HAVING COUNT(Field1) > 1
ORDER BY Field1 desc
Jednokierunkowa
SELECT t1.*
FROM db.table t1
WHERE exists
(SELECT *
FROM db.table t2
where t1.pk != t2.pk
and t1.someField = t2.someField)
Jak stwierdził OMG Kucyki, klauzula posiadania jest tym, czego szukasz. Jeśli jednak liczyłeś na to, że zamiast podsumowania otrzymasz oddzielne wiersze („posiadanie” tworzy podsumowanie) - nie można tego zrobić w pojedynczej instrukcji. W takim przypadku musisz użyć dwóch instrukcji.
Podaję przykład na Group By między dwoma tabelami w 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
Dla mnie opcja Brak grupy po prostu zwróciła pusty wynik. Więc myślę, że posiadanie grupy przy oświadczeniu jest bardzo ważne
Należy również wspomnieć, że „pk” powinno być polem kluczowym. Samozłączenie
SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk
Bill Karwin dał wam wszystkie rekordy, które są duplikatami, o co mi chodziło. Ponieważ niektóre mają więcej niż dwa, możesz uzyskać ten sam rekord więcej niż raz. Napisałem wszystko do innej tabeli z tymi samymi polami, aby pozbyć się tych samych rekordów przez pomijanie pól kluczowych. próbowałem
SELECT * FROM db.table HAVING COUNT(someField) > 1
powyżej pierwszy. Dane z niego zwrócone dają tylko jeden z duplikatów, mniej niż 1/2 tego, co daje, ale liczba jest dobra, jeśli to wszystko, czego chcesz.
GROUP BY
pewno (chyba że jest to jakaś niestandardowa rzecz MySQL)?