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