设置合适的标题非常困难,因为我不知道我如何描述我的问题。
我有一个这样的表:
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。
第二次尝试:
我需要一个值,其中可以看到有多少个Flag具有相同的dl_seID的值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
编辑:
正如op要求的一些解释一样,它去了:
您要问的是按
dl_seID
计数标志的数量,然后执行此操作以分隔问题,首先要获得dl_seID
的标志计数,这是此子查询: select dl_seID, count(dlFlag) ctflags
from tablea
where dlFlag=1
group by dl_seID
无论您要称呼它如何,它都变成了一个“单独的表”或一组新的数据。然后,您必须将其与原始数据(来自表)结合起来,例如查询答案。
左联接部分是因为也许有些数据不会用
where dlFlag=1
抱怨,因此如果要获取0
,则必须将表中存在的或不存在的所有值带入我们创建的子组中。并且此ifnull(b.ctflags,0)
用于theese数据表中存在数据,但没有标志(针对您的问题)。如果仅使用b.ctflags
,它将带来null。