code

한 필드의 개수가 1보다 큰 경우 선택

codestyles 2020. 8. 30. 08:39
반응형

한 필드의 개수가 1보다 큰 경우 선택


다음과 같이하고 싶습니다.

SELECT * 
  FROM db.table 
 WHERE COUNT(someField) > 1

MySql에서 어떻게 이것을 달성 할 수 있습니까?


집계 결과 비교를 위해 HAVING, not WHERE절을 사용하십시오 .

액면가에서 쿼리 취하기 :

SELECT * 
  FROM db.table 
HAVING COUNT(someField) > 1

이상적으로 GROUP BYHAVING에서 적절한 평가를 위해 정의 되어야 하지만 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



나를 위해, 그냥 빈 결과를 반환하는 그룹이 없습니다. 그래서 나는 having 진술을 위해 그룹을 갖는 것이 매우 중요하다고 생각합니다.


또한 "pk"가 키 필드 여야한다는 것도 언급해야합니다. 셀프 조인

SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk 

Bill Karwin은 내가 원했던 모든 중복 기록을 제공합니다. 일부는 둘 이상을 가지고 있기 때문에 동일한 레코드를 두 번 이상 얻을 수 있습니다. 키 필드 억제로 동일한 레코드를 제거하기 위해 동일한 필드가있는 다른 테이블에 모두 썼습니다. 나는 시도했다

SELECT * FROM db.table HAVING COUNT(someField) > 1

먼저. 그것에서 반환 된 데이터는 중복 중 하나만 제공합니다. 이것이 제공하는 것의 1/2 미만이지만 원하는 것이 전부라면 개수가 좋습니다.

참고 URL : https://stackoverflow.com/questions/3710483/select-where-count-of-one-field-is-greater-than-one

반응형