2013-10-07 2 views
3

다음 SQL Fiddle을 살펴보십시오. 이 그들을 출력 한 후 같은 rel_id이 그 함께 모든 행을 추가하고쿼리로 그룹 제한

SELECT sub.entry_id, sum(jud.stage), sub.category_id, sub.member_group 
FROM exp_judging AS jud 
LEFT JOIN exp_submissions AS sub ON jud.rel_id = sub.id 
WHERE jud.rel_id = jud.rel_id 
GROUP BY jud.rel_id 
ORDER BY 3 ASC 
LIMIT 10 

:

http://sqlfiddle.com/#!2/f7939/3

당신은 내 쿼리를 볼 수 있습니다.

각 카테고리의 상위 x 개의 숫자 만 출력해야합니다. 이제는 각 카테고리에서 3 개를 말할 수 있습니다.

그래서 예를 들어, 내 SQL 바이올린의 결과는 다음과 같습니다

카테고리 1 : (entry_id 점수의 순서대로) 10, 11, 16

카테고리 2 : 13, 12, 14

어떻게하면됩니까? 내가 확신하는 동안

+0

어떤 항목에 대한 ID 16 - 11과 15의 합이 더 높지 않습니까? BTW, 피들 제공 주셔서 감사합니다! – sgeddes

+0

@sgeddes 좋은 캐치, 16으로 변경했습니다. – ccdavies

답변

2

은이를 달성하기 위해 user defined variables를 사용하여 row number을 소개 수, 청소기 해결책이 있어야한다 :

SELECT * 
FROM (
    SELECT *, 
    @rn:=IF(@prevCat=category_id, @rn + 1,1) rn, 
    @prevCat:=category_id 
    FROM (
    SELECT sub.entry_id, 
     sum(jud.stage), 
     sub.member_group, 
     sub.category_id 
    FROM exp_judging AS jud 
     LEFT JOIN exp_submissions AS sub ON jud.rel_id = sub.id 
    GROUP BY jud.rel_id 
    ORDER BY sub.category_id, sum(jud.stage) DESC, sub.entry_id 
) T 
    JOIN (SELECT @rn:=0, @prevCat:=0) T2 
) T 
WHERE rn <= 3 
+0

고마워요! 그것보다 조금 더 복잡하기 때문에, 나는 그것을 배우기를 희망하며 그것을 공부할 것입니다. – ccdavies

+0

@ccdavies - 걱정할 필요가 없습니다. 기꺼이 도와 드리겠습니다! – sgeddes