Mysql 基于同一列中多行的值获取计数

Mysql 基于同一列中多行的值获取计数,mysql,sql,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 T

我对数据库比较陌生。 如果我有如下表格:

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
b计数:对于给定的PHeader和AHeader值,如果IHeader值的所有值均为(0,2和3),则PHeader的b计数值增加1,因为对于p1,它有a1和a4,所有值均为0,2和3作为IHeader值,p1的b计数为2

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


你能给我写查询的提示吗?

你可以使用两个聚合来实现这一点。内部的一个聚合在
pheader
aheader
级别。这会计算您感兴趣的值

外部的一个应用了您描述的这些总结的逻辑:

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;

请检查下面的sql查询

SELECT 
PHeader ,
COUNT(*) as BCount  , --total 
SUM(CASE WHEN PHeader = 'p1' THEN 1 ELSE 0 END) as TCount  
从 你的桌名 按费尔德分组


希望这能给你一些想法。

我相信你会把这个问题弄得更混乱。我只是不知道怎么做。嗨,戈登,谢谢你的快速回复。我相信你的答案是正确的。我使用的是Mircosoft SQL Server,它在“>”附近显示了不正确的语法。你能帮我把语法弄好吗。不管怎样,谢谢你们指出了正确的方向。不知何故,我不能正确地理解语法,但我使用了case-when语句,并正确地理解了它。谢谢你的邀请help@user2844265 . . . 我在中添加了该版本。如果您真的使用SQL Server,您的问题被错误地标记为MySQL。多亏了这个问题的另一个扩展,对于给定的PHeader值,如果BCount值大于0,那么我需要获得最大的Aheader值,这有助于BCount的增加。因此,在上述用例中:对于P1-(a1和a4),有助于增加BCount。在这种情况下,我需要得到a4作为MaxAHeaderValueForPHeader。是否可以包含在同一查询中?谢谢你的回复。