MySQL-WHERE 절에서 COUNT (*) 사용


157

MySQL에서 다음을 달성하려고합니다 ( pseudo코드 참조 )

SELECT DISTINCT gid
FROM `gd`
WHERE COUNT(*) > 10
ORDER BY lastupdated DESC

WHERE 절에서 (SELECT ...)를 사용하지 않고이 작업을 수행하는 방법이 있습니까? 자원 낭비처럼 보일 것입니다.

답변:


264

이 시도;

select gid
from `gd`
group by gid 
having count(*) > 10
order by lastupdated desc

37
+1 +1 이것은 항상 SQL 강좌 나 서적에 대해 올바르게 가르치고 귀찮게하지 않는 조항이며 일반적으로 코더가 초보자 수준을 넘어서 진행되었다는 신호를 알고 있습니다.
Cruachan

부울 OR 표현식의 일부로 COUNT ()를 사용하려고하면 어떻게합니까? 예를 들면AND ((stock = 1 OR quantity > 0) OR (COUNT(v.id) > 0)
nnyby

나는 그것을 알아 냈습니다. 당신은 이렇게 HAVING 절에 추가 할 수 있습니다 :HAVING variations > 0 OR (stock = 1 OR quantity > 0)
nnyby

28

당신이하려는 일이 확실하지 않습니다 ... 아마도

SELECT gid, COUNT(*) AS num FROM gd GROUP BY gid HAVING num > 10 ORDER BY lastupdated DESC

1
MSSQL에서 "잘못된 열 이름" 구문 분석 오류가 발생했습니다 num. 깨끗 한 구문에 대 한 어쨌든 +1 (내 설정 또는 ms ... 아 잘 될 수 있음).
samis

선택의 모든 열에 별명을 제공하십시오.
Adil Khalil 2016 년

17
SELECT COUNT(*)
FROM `gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC;

편집 (만약 당신이 원하는 경우) :

SELECT MIN(gid)
FROM `gd`
GROUP BY gid
HAVING COUNT(gid) > 10
ORDER BY lastupdated DESC

고마워 조하지만 그것은 COUNT ()를 반환-나는 COUNT (*)보다 10보다 더 많은 모든 gid를 반환하려고합니다

1
거기에 Min ()이 필요하지 않습니다.
Ali Ersöz

14

시험

SELECT DISTINCT gid
FROM `gd`
group by gid
having count(*) > 10
ORDER BY max(lastupdated) DESC

14

조항이없는 학술 용 버전 :

select *
from (
   select gid, count(*) as tmpcount from gd group by gid
) as tmp
where tmpcount > 10;

13

WHERE 절에는 집계 함수 (예 : COUNT, MAX 등)를 사용할 수 없습니다. 따라서 대신 HAVING 절을 사용합니다. 따라서 전체 쿼리는 다음과 유사합니다.

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;

6

-30 분마다 기록이없는 기상 관측소 검색

SELECT stationid
FROM weather_data 
WHERE  `Timestamp` LIKE '2011-11-15 %'  AND 
stationid IN (SELECT `ID` FROM `weather_stations`)
GROUP BY stationid 
HAVING COUNT(*) != 48;

-yapiskan의 위치가 ..에서 선택됩니다.


1

난 당신이 추가 할 수 없습니다 생각 count()과 함께 where. 이제 이유를 보자 ....

where와 같지 않다는 것은 having, having당신이 그룹이나 같은 수의 일을 처리하거나 처리한다는 의미이며, 또한 전체 그룹을 다루고 있습니다.

이제 전체 그룹으로 작동하는 방법을 세어보세요.

테이블을 만들고 일부 ID를 입력 한 후 다음을 사용하십시오.

select count(*) from table_name

당신은 총 값을 찾을 것입니다 그것은 어떤 그룹을 나타내는 것을 의미합니다! 그래서 where함께 추가 않습니다 count();


1

COUNT (*)는 HAVING과 함께 만 사용할 수 있으며 GROUP BY 문 뒤에 사용해야합니다. 다음 예를 참조하십시오.

SELECT COUNT(*), M_Director.PID FROM Movie
INNER JOIN M_Director ON Movie.MID = M_Director.MID 
GROUP BY M_Director.PID
HAVING COUNT(*) > 10
ORDER BY COUNT(*) ASC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.