mysql - 计算多行中具有特定值的行数

标签 mysql count

很难设置一个合适的标题,因为我不知道如何描述我的问题。

我有一个这样的表:

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/

相关文章:

mysql - 在 mysql 5.0 中将文件与 REGEXP 进行比较

python - SELECT COUNT(distinct CASE WHEN x > y THEN seller_id ELSE NULL END) FROM 表 GROUP BY 列 PANDAS 等效项

php - 计算 Mysql 表上的相同值

PHP session 变量只递增一次

MySQL:在巨大的插入后添加索引 ->更快与否

mysql左连接可以使用右表中的一条最新记录吗?

Mysql select order by count 之类的

php - Twig,PHP 计算来自 MySql 数据库的每日客户端事件的数量

php - 多次循环中的最高值数

mysql 计数多个组