我有4列(id, bm, name, act
)的表格。
我想检索按bm
分组的记录,并计算每个组中act = no
和act = yes
一次有多少记录...
所以,如果我有记录:
(Id, bm, name, act)
1, 5, Nik, yes
2, 6, Mike, yes
3, 5, Tom, no
4, 5, Alex, no
我需要的结果是:
(bm, totalYes, totalNo)
5, 1, 2
6, 1, 0
我想一切都可以从SQL中检索,但我不知道如何:(
答案 0 :(得分:0)
尝试以下
SELECT SUM(CASE WHEN act = 'no' THEN 1 ELSE 0 END) as NoCount,
SUM(CASE WHEN act = 'yes' THEN 1 ELSE 0 END) YesCount
FROM tbl
GROUP BY gm
答案 1 :(得分:0)
您可以使用条件聚合来实现此结果:
select
bm,
sum(case when act = 'yes' then 1 else 0 end) as "Count of yes",
sum(case when act = 'no' then 1 else 0 end) as "Count of no"
from t
group by bm;
对于某些数据库,如MySQL,您可以将聚合减少到sum(act = 'yes')
,但ANSI SQL标准需要完整的案例表达。
答案 2 :(得分:0)
由于聚合函数通常会跳过空值,因此您可以创建两列TotalYes
和TotalNo
,其值为NULL
,用于您不希望包含在计数中的情况。
这就是我的意思:
SELECT
bm,
COUNT( CASE act WHEN 'yes' THEN 1 ELSE NULL END ) TotalYes,
COUNT( CASE act WHEN 'no' THEN 1 ELSE NULL END ) TotalNo
FROM tbl
GROUP BY bm