就像在计数SQL里面一样

时间:2018-04-16 20:13:14

标签: sql

我想使用Like Inside a Count所以我可以使用VolunteerFundersID旁边的(在此示例中)活跃志愿者数量

这就是我所拥有的,虽然有些东西告诉我,我的方式完全是错误的。

select
    VolunteersFunderID,
    Count( VolunteerCategory LIKE '%Active%' ) as NumberActive
from
    VolunteerTbl
group BY
    VolunteersFunderID 

我是新手使用这个网站,任何不是侮辱的反馈(我上次发布的时候)都会非常感激。

3 个答案:

答案 0 :(得分:1)

有几种不同的方法可以做到这一点,您需要选择最适合您的方案的方法。

select VolunteersFunderID,
    Count(CASE WHEN VolunteerCategory LIKE '%Active%' THEN 1 END) as NumberActive
from VolunteerTbl
group BY VolunteersFunderID

这将遍历所有行并计算VolunteerCategory处于活动状态的任何记录。这样,如果您需要这样做,可以计算更多类别并添加其他条件,因为您正在查看完整数据集。

另一种方法是使用WHERE子句过滤数据:

select VolunteersFunderID,Count(1) as NumberActive
from VolunteerTbl
WHERE VolunteerCategory LIKE '%Active%'
group BY VolunteersFunderID

使用WHERE子句,您在计算任何内容之前过滤数据,因此更难以进行其他计算。

答案 1 :(得分:0)

将其移至WHERE子句:

SELECT VolunteersFunderID, COUNT(VolunteerCategory) AS NumberActive
FROM VolunteerTbl
WHERE VolunteerCategory LIKE '%Active%'
GROUP BY VolunteersFunderID 

答案 2 :(得分:0)

计数是聚合函数,所以"计数"只有非NULL值。知道您可以使用CASE使NULLNOT NULL值仅计算活动值。

以下查询应该有效:

select VolunteersFunderID, 
    Count(
          case when VolunteerCategory LIKE '%Active%' 
              then 1 
              else NULL
          end
    ) as NumberActive
from VolunteerTbl
group BY VolunteersFunderID 

值得一提的是:

  • 在开头使用带有通配符like的{​​{1}}会降低查询速度 - 您确定不能只写%吗?
  • 您确定该字段中的其他值不会干扰您的" like条件&#34 ;?我可以想象其他VolunteerCategory = 'Active'例如VolunteerCategory