MySQL:由`topic_id`分组,如果`topic_id`> 0

时间:2011-04-07 09:15:39

标签: mysql

我有entries可能会或可能不会分配给topic

我想通过总结那些属于同一主题的得分来选择得分最高的作品。另外,我想得到一些类似的条目,这些条目组合在一起。

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)并不总是返回属于同一主题的实际条目数。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;