SQL SELECT查询与组和不同

时间:2016-01-16 17:39:45

标签: sql database

我有4列(id, bm, name, act)的表格。

我想检索按bm分组的记录,并计算每个组中act = noact = 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中检索,但我不知道如何:(

3 个答案:

答案 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标准需要完整的案例表达。

Sample SQL Fiddle

答案 2 :(得分:0)

由于聚合函数通常会跳过空值,因此您可以创建两列TotalYesTotalNo,其值为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