首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL:如果`topic_id` >0,则按`topic_id`分组

MySQL:如果`topic_id` >0,则按`topic_id`分组
EN

Stack Overflow用户
提问于 2011-04-07 17:15:39
回答 2查看 57关注 0票数 0

我的entries可能已分配给topic,也可能未分配。

我想通过将属于同一主题的条目的分数相加来选择得分最高的条目。此外,我希望获得一些相似的条目,这些条目被分组在一起。

代码语言:javascript
运行
复制
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)并不总是返回属于同一主题的实际条目数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-07 17:21:07

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2011-04-07 17:38:03

代码语言:javascript
运行
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5578727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档