2011-04-19 5 views
0

나는 Select the 3 most recent records where the values of one column are distinct과 비슷한 것을하려고 시도하지만 카운트와 함께 그룹을 보존해야 함을 의미합니다.MYSQL 그룹 카운트로 주문 하시겠습니까?

같은 예를 사용 :

id  time  text  otheridentifier 
------------------------------------------- 
1  6   apple  4 
2  7   orange 4 
3  8   banana 3 
4  9   pear  3 
5  10  grape  2 

SELECT *, COUNT(*) FROM `table` GROUP BY (`otheridentifier`) ORDER BY `time` DESC LIMIT 3 

적절한 횟수로 5 아이디, 3, 1을 반환을하지만 원하는 5, 4, 해당 게시물 2.

이 솔루션은

했다
SELECT * FROM 'table' WHERE 'id' = (SELECT 'id' 
FROM 'table' as 'alt' 
WHERE 'alt'.'otheridentifier' = 'table'.'otheridentifier' 
ORDER BY 'time' DESC 
LIMIT 1) ORDER BY 'time' DESC LIMIT 3 

하지만 난 거기에 그룹을 필요로하기 때문에, 카운트를 잡아 표시되지 않습니다 : 그의 시작 부분에 COUNT (*)를 추가하면 내가 ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause를 얻을.

+0

sql에 그룹을 만들 수 없습니다. 뭘 계산하려고하는거야? –

+0

첫 번째 쿼리에서 : 'otheridentifier'로 그룹화 된 항목의 수를 계산하려고합니다. – aaronwinborn

답변

0
SELECT *, COUNT(*) 
FROM `table` 
GROUP BY (`otheridentifier`) 
ORDER BY COUNT(*) DESC LIMIT 3 
^^^^^^^^^^^^^^^^^ 

단순히 order-by 절을 변경하십시오. 순서 지정은 그룹화/집계가 완료된 후에 수행되므로 해당 집계 함수의 결과를 기준으로 정렬 할 수 있습니다.

+0

은 '시간'으로 주문해야 할 필요를 유지하지 못하는 것 같습니다. – aaronwinborn

+0

그래서 어떤 그룹에 마지막 레코드를 원하십니까? –

+0

네, 그게 내가 원하는거야! 나는 그 특정 그룹에있는 모든 사람의 수와 함께, otheridentifier에 의해 그룹화 된 마지막 시간과 일치하는 레코드를 원할 것이다. – aaronwinborn