Chcę zrobić coś takiego:
SELECT *
FROM db.table
WHERE COUNT(someField) > 1
Jak mogę to osiągnąć w MySql?
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ć ...
GROUP BY
pewno (chyba że jest to jakaś niestandardowa rzecz MySQL)?someField
wartości inne niż null lub pusty zestaw wyników, jeśli nie zawiera.źródło
Możesz to również zrobić za pomocą samodzielnego dołączenia:
źródło
Proszę bardzo:
źródło
Jednokierunkowa
źródło
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.
źródło
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
źródło
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
źródło
Należy również wspomnieć, że „pk” powinno być polem kluczowym. Samozłączenie
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.
źródło