[英]Getting Count based on values of multiple rows of the same column
我对数据库比较陌生。 假设我有如下表格:
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。
您能给我提示编写查询的技巧吗?
您可以使用两种聚合方法来实现。 内层聚集在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;
请检查beloq sql查询
SELECT
PHeader ,
COUNT(*) as BCount , --total
SUM(CASE WHEN PHeader = 'p1' THEN 1 ELSE 0 END) as TCount
来自PHeader的yourtablename组
希望这会给您一些想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.