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