2011-04-07 4 views
0

topic에 할당 될 수도 있고 할당되지 않을 수도있는 entries이 있습니다.MySQL : 'topic_id`> 0 일 경우 group by 0

같은 주제에 속한 점수를 합산하여 점수가 가장 높은 항목을 선택하고 싶습니다. 또한 여러 항목을 그룹화하여 비슷한 항목을 얻고 싶습니다.

SELECT *, COUNT(`topic_id`) FROM `entries` 
GROUP BY `topic_id` HAVING `topic_id` > 0 
ORDER BY SUM(`score`) DESC LIMIT 30 

이 쿼리는 몇 가지를 빠뜨린다. 첫째, topic_id (topic_id = 0)가없는 항목을 그룹화하지 않고 개별적으로 처리해야합니다. 둘째, COUNT (topic_id)는 항상 동일한 주제에 속하는 실제 항목 수를 반환하지 않습니다.

답변

0
SELECT * FROM 
( 
    SELECT topic_id,COUNT(*),SUM(`score`) AS sum 
    FROM `entries` 
    WHERE `topic_id` > 0 
    GROUP BY `topic_id` 
UNION 
    SELECT topic_id, 1,1 AS sum 
    FROM `entries` 
    WHERE `topic_id` = 0 
) 
ORDER BY sum DESC LIMIT 30 
+0

그러나이 topic_id없이 개별 항목을 포함하지 않습니다, 그것은 무엇입니까? – krn

+0

님이 topic_id = 항목이 topic_id = 0 인 항목이 없다면 내 의견에 따라 내 질문을 편집했습니다. – Dalen

0
SELECT 
    `topic_id` > 0 IsGroupedTopid, 
    if(`topic_id`>0, `topic_id`, id) TopicOrEntryId, 
    COUNT(*) CountEntries, 
    SUM(`score`) TotalScore 
FROM `entries` 
GROUP BY 
    `topic_id` > 0, 
    if(`topic_id`>0, `topic_id`, id) 
ORDER BY SUM(`score`) DESC 
LIMIT 30;