我的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
)并不总是返回属于同一主题的实际条目数。
发布于 2011-04-07 17:21:07
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
发布于 2011-04-07 17:38:03
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;
https://stackoverflow.com/questions/5578727
复制相似问题