mysql - 根据同一列的多行值获取计数

标签 mysql sql

我对数据库比较陌生。 假设我有如下表:

PHeader AHeader IHeader

p1       a1      0

p1       a1      2

p1       a1      3

p1       a2      0

p1       a3      0

p1       a4      0

p1       a4      2

p1       a4      3

p2       a5      0

预期输出是:

PHeader BCount  TCount


p1          2    2

p2          0    1

BCount:对于给定的 PHeader 和 AHeader 值,如果 IHeader 值具有 (0,2 &3) 的所有值,则 PHeader 的 BCount 值增加 1 ,因为对于 p1,它具有 a1 和 a4 以及所有值0,2 和 3 的值作为 IHeader 值,p1 的 BCount 为 2

TCount:对于给定的给定 PHeader 和 AHeader 值,如果 IHeader 值只有 0 而不是 2 或 3,则给定 PHeader 的 TCount 增加 1。因此 p1 的 TCount 给出为 2。

您能给我一些编写查询的提示吗?

最佳答案

您可以使用两个聚合来解决此问题。内部聚合在 pheaderaheader 级别。这会计算您感兴趣的值。

外部应用了您对这些摘要所描述的逻辑:

select pheader,
       sum(ih_0 > 0 and ih_2 > 0 and ih_3 > 0) as bcount,
       sum(ih_0 > 0 and (ih_2 = 0 or ih_3 = 0)) as tcount
from (select pheader, aheader,
             sum(iheader = 0) as ih_0,
             sum(iheader = 2) as ih_2,
             sum(iheader = 3) as ih_3
      from table t
      group by pheader, aheader 
     ) pa
group by pheader;

编辑:

问题被标记为MySQL。以下内容适用于两个数据库:

select pheader,
       sum(case when ih_0 > 0 and ih_2 > 0 and ih_3 > 0 then 1 else 0 end) as bcount,
       sum(case when ih_0 > 0 and (ih_2 = 0 or ih_3 = 0) then 1 else 0 end) as tcount
from (select pheader, aheader,
             sum(case when iheader = 0 then 1 else 0 end) as ih_0,
             sum(case when iheader = 2 then 1 else 0 end) as ih_2,
             sum(case when iheader = 3 then 1 else 0 end) as ih_3
      from table t
      group by pheader, aheader 
     ) pa
group by pheader;

关于mysql - 根据同一列的多行值获取计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22380106/

相关文章:

php - MySQL 更新无法使用 If 语句

mysql - 并行运行处理器时,我应该如何选择下一个要处理的项目?

PHP SQL SELECT 查询适用于除一个表之外的每个表

sql - 如何加快对非索引列 SQL 的查询速度

php - 使用 for() 循环创建唯一的 PHP 变量

php - PHP Yii 框架可以连接到 parse.com 吗?

MySQL 列更新与触发器

php - 在mysql中获取php结果

SQL - 动态 SQL 查询将用分号 (;) 分隔的单列字符串转换为多列

mysql - 如何在每次堆栈启动时引导 RDS MySQL 创建表?