很难设置一个合适的标题,因为我不知道如何描述我的问题。
我有一个这样的表:
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。
第二次尝试: 我需要一个值来查看有多少个具有相同 dl_seID 且值为 1 的 Flag。
这可能吗?
希望你们知道我想要什么^^
问候
最佳答案
试试这个:
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的注册表
参见 fiddle :http://sqlfiddle.com/#!2/ef9b0/5
编辑: 由于 op 要求一些解释,这里是:
您要求的是按 dl_seID
计算标志数量,为此,您需要将问题分开,首先获得 dl_seID
的计数code> by flags,这是这个子查询:
select dl_seID, count(dlFlag) ctflags
from tablea
where dlFlag=1
group by dl_seID
这成为一个“单独的表”或一组新的数据,无论你想怎么调用它。然后,您必须将其与原始数据(来自表)连接起来,例如答案查询。
左连接部分是因为也许有些数据不会提示 where dlFlag=1
因此,如果你想将 then 作为 0
你必须带上所有我们创建的子组中存在或不存在的表中的值。这个 ifnull(b.ctflags,0)
用于这些数据数据存在于您的表中但没有标志(针对您的问题)。如果您只使用 b.ctflags
它将带来 null。
关于mysql - 计算多行中具有特定值的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20072297/