Відповіді:
Використовуйте 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)?