다음과 같이하고 싶습니다.
SELECT *
FROM db.table
WHERE COUNT(someField) > 1
MySql에서 어떻게 이것을 달성 할 수 있습니까?
답변
집계 결과 비교를 위해 HAVING
, not WHERE
절을 사용하십시오 .
액면가에서 쿼리 취하기 :
SELECT *
FROM db.table
HAVING COUNT(someField) > 1
이상적으로 GROUP BY
는 HAVING
절 에서 적절한 평가를 위해 정의 되어야 하지만 MySQL은 GROUP BY …
에 대한 고유 한 제약 조건을 준비하는 중 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가 말했듯이 having 절은 당신이 추구하는 것입니다. 그러나 요약 대신 불연속 행을 얻고 자했다면 ( “가져있는”요약이 요약을 생성 함) 단일 문으로 수행 할 수 없습니다. 이 경우 두 개의 문을 사용해야합니다.
답변
Sql의 두 테이블 사이에 Group By에 대한 예제를 제공합니다.
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