设置正确的标题非常困难,因为我不知道如何描述我的问题。
我有一张这样的表:
dlID | dl_seID | dlEpisode | dlFlag
___________________________________
1 | 1 | 1 | 0
2 | 1 | 2 | 1
3 | 1 | 3 | 1
4 | 2 | 1 | 1
5 | 2 | 2 | 0
6 | 3 | 1 | 0
我想要的是一个选择查询,我得到这样的东西:
dlID | dl_seID | dlEpisode | dlFlag | dlFlagCount
_________________________________________________
1 | 1 | 1 | 0 | 2
2 | 1 | 2 | 1 | 2
3 | 1 | 3 | 1 | 2
4 | 2 | 1 | 1 | 1
5 | 2 | 2 | 0 | 1
6 | 3 | 1 | 0 | 0
dlFlagCount应该是dlFlag = 1的计数器,其中dl_seID = dl_seID。
第二次尝试: 我需要一个值,我看到有多少Flags的值为1,dl_seID相同。
这可能吗?
我希望你们知道我想要的东西^^
此致
答案 0 :(得分:1)
试试这个:
select
a.*,
ifnull(b.ctflags,0)
from
tablea a left join
( select dl_seID, count(dlFlag) ctflags
from tablea
where dlFlag=1
group by dl_seID ) b on (a.dl_seID = b.dl_seID)
左连接只是为了获得带有0标志的注册表
请参阅小提琴:http://sqlfiddle.com/#!2/ef9b0/5
修改强> 正如操作要求一些解释,这里是:
你问的是要计算dl_seID
的标记数量,为此你需要这样做你自己解决问题,首先你得到dl_seID
标记的计数,这个是这个子查询:
select dl_seID, count(dlFlag) ctflags
from tablea
where dlFlag=1
group by dl_seID
这成为了一个'separe table'或一组新的数据,无论你想要什么。然后你必须将它与原始数据(来自你的表格)一起加入,就像查询答案一样。
左连接部分是因为可能有一些数据不会与where dlFlag=1
抱怨,因此如果您想要获得0
,则必须从表中存在或不存在我们的所有值创建子组。这个ifnull(b.ctflags,0)
适用于您桌上存在的数据数据,但没有标记(针对您的问题)。如果仅使用b.ctflags
,则会带来空值。
答案 1 :(得分:0)
SELECT x.*
, COALESCE(y.flagcount,0) flagcount
FROM my_table x
LEFT
JOIN
( SELECT seID
, COUNT(*) flagcount
FROM my_table
WHERE flag = 1
GROUP
BY seid
) y
ON y.seid = x.seid;