Відповіді:
Використовуйте HAVING, а не WHEREпункт, для сукупного порівняння результатів.
Отримання запиту за номіналом:
SELECT *
FROM db.table
HAVING COUNT(someField) > 1
В ідеалі, GROUP BYу HAVINGпункті повинно бути визначено правильну оцінку , але MySQL дозволяє допускати приховані стовпці від GROUP BY ...
Це готується до унікального обмеження someField? Схоже, це має бути ...
someFieldзначень або порожній набір результатів, якщо цього немає.
SELECT username, numb from(
Select username, count(username) as numb from customers GROUP BY username ) as my_table
WHERE numb > 3
Ви також можете це зробити за допомогою самостійного приєднання:
SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk
Ось вам:
SELECT Field1, COUNT(Field1)
FROM Table1
GROUP BY Field1
HAVING COUNT(Field1) > 1
ORDER BY Field1 desc
Односторонній
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, застереження про те, про що ви хочете. Однак, якщо ви сподівалися, що ви отримаєте дискретні рядки замість резюме ("маючи" створює резюме) - це не може бути зроблено в одному заяві. У цьому випадку ви повинні використовувати два твердження.
Я наводжу приклад для групи By між двома таблицями в 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
Слід також зазначити, що "pk" має бути ключовим полем. Самоприєднання
SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk
від Білла Карвіна, даю вам усі записи, які є дублікатами, саме цього я хотів. Оскільки деякі мають більше двох, ви можете отримувати один і той самий запис не один раз. Я записав усіх в іншу таблицю з тими ж полями, щоб позбутися одних і тих же записів шляхом придушення ключових полів. я намагався
SELECT * FROM db.table HAVING COUNT(someField) > 1
вище першого. Дані, повернені з нього, дають лише один із дублікатів, менше ніж 1/2 того, що це дає вам, але підрахунок хороший, якщо це все, що ви хочете.
GROUP BYбезумовно, (якщо це не стандартне для MySQL)?