计数-SQL内的条件

时间:2016-10-07 00:27:50

标签: sql count

我正在尝试在count语句中写一个条件,它应该只计算没有ENDDATE的条目。我正在寻找在计数内写条件,因为这是大型SQl查询的一小部分

3 个答案:

答案 0 :(得分:0)

示例查询,

选择产品,计数(*)作为数量

来自表格

其中end_date为空

按年龄分组

此查询列出了每个没有结束日期的产品的数量

答案 1 :(得分:0)

一种方法使用条件聚合:

select sum(case when end_date is null then 1 else 0 end) as NumNull
. . .

另一种方法是减去两个计数:

select ( count(*) - count(end_date) ) as NumNull

count(end_date)计算 NULL的数字,因此从完整计数中减去此数字会得到 {{1}的数字}。

答案 2 :(得分:0)

Uhmmmm。

听起来你正在寻找条件聚合。

所以,如果你有一个当前的陈述是有效的(我们只是猜测,因为我们没有看到任何你到目前为止已尝试过......)

SELECT COUNT(1) 
  FROM mytable t

并且您想要另一个表达式,它返回满足某些条件的行数......

当你说“没有ENDDATE”时,你正在刷新ENDDATE值为NULL的行(同样,我们只是猜测该表有一个名为ENDDATE的列。每一行都有一个ENDDATE列。)

我们将使用符合ANSI标准的CASE表达式,因为这适用于大多数数据库(SQL Server,Oracle,MySQL,Postgres ......而且我们不知道您使用的是什么数据库。

SELECT COUNT(1) 
     , COUNT(CASE WHEN t.ENDDATE IS NULL THEN 1 ELSE NULL END) AS cnt_null_enddate
  FROM mytable t