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。是否可以包含在同一查询中?谢谢你的回复。