Mysql子查询总票数

Posted

技术标签:

【中文标题】Mysql子查询总票数【英文标题】:Mysql subquery sum of votes 【发布时间】:2013-09-01 03:00:45 【问题描述】:

我有一张选票表,旁边还有一张“想法”(条目)表

基本上,我想检索一个可以读取为的对象:

id,
name,
title,
votes : 
  up : x,
  down : y

所以这很简单,直到我到达子查询并且需要对投票的正负值进行两组 SUM。

SELECT id,name,title FROM ideas
LEFT JOIN votes ON ideas.id = votes.idea_id

我的(简化的)投票表如下所示:

id
idea_id
value

其中value 可以是正数或负数int

如何在单个查询中获取上述对象?

加分项:我如何获得一个aggregate 字段,其中正面和负面的投票加在一起?

【问题讨论】:

见***.com/questions/3515193/…SUM(CASE WHEN ...) 【参考方案1】:

试试这个.. 未测试。

SELECT 
id,
name,
title, 
SUM(case when value > 0 then value end) up,
SUM(case when value < 0 then value end) down
 FROM ideas
LEFT JOIN votes ON ideas.id = votes.idea_id
GROUP By id;

【讨论】:

它将按哪个id 分组? ideas.id ? 另外,这不会使它成为 votes 子节点的节点 - 有什么方法可以实现这一点,或者重构我的前端会更容易吗?如果没有 SUM,它会返回 0 吗? 等待SQL专家醒来,我确定这是可以解决的。 (我的另一个猜测是子查询,但这可能很慢..) 啊,好酷=) - 我刚试过,如果没有投票,它会返回NULL btw.. 你的“奖励点”应该是第三个 sum() 没有价值限制。 :D

以上是关于Mysql子查询总票数的主要内容,如果未能解决你的问题,请参考以下文章

子选择或连接?有没有更好的方法来编写这个 mysql 查询?

MySQL子查询(六)

MySQL添加总列

mysql 删除可以用子查询吗

SQL 子查询

那个mysql 子查询和连接查询 一般常用哪个 谁效率高些