设置合适的标题非常困难,因为我不知道我如何描述我的问题。

我有一个这样的表:

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。

10-01 02:17