Google bigquery 如何在条件选择中用0替换null

Google bigquery 如何在条件选择中用0替换null,google-bigquery,Google Bigquery,我的名单上有100名主管,我想统计一下在2018年1月1日开始时,有多少员工在他们的监督下工作 这些是我试过的密码。然而,由于主管没有员工,他们的名字就消失在表格中。我只想保留他们的姓名,如果他们没有员工,则将员工人数设置为0 select Supervisor, IFNULL(COUNT(EmpID),0) AS start_headcount from `T1` where (Last_hire_date < date'2018-01-01'

我的名单上有100名主管,我想统计一下在2018年1月1日开始时,有多少员工在他们的监督下工作

这些是我试过的密码。然而,由于主管没有员工,他们的名字就消失在表格中。我只想保留他们的姓名,如果他们没有员工,则将员工人数设置为0

select
    Supervisor,
    IFNULL(COUNT(EmpID),0) AS start_headcount
from 
    `T1`
where
     (Last_hire_date < date'2018-01-01'
     AND
    term_date >=  date'2018-01-01' )OR 
    ( Last_hire_date < date'2018-01-01'
     AND
    term_date is null)
group by
    1
order by
    1 asc
结果显示,名单上只有92名下属有员工的主管。其他8名没有员工的主管刚刚离开。我想不出更好的办法来改进它


有人能帮忙吗?

下面是BigQuery标准SQL

#standardSQL
SELECT
  Supervisor,
  COUNTIF(
    (Last_hire_date < DATE '2018-01-01' AND term_date >=  DATE '2018-01-01' ) 
    OR 
    (Last_hire_date < DATE'2018-01-01' AND term_date IS NULL)
  ) AS start_headcount
FROM 
  `T1`
GROUP BY
  1
ORDER BY
  1 ASC   
原始查询中存在的问题是,筛选发生在WHERE子句级别,因此有效地完全排除了不匹配的行,因此没有显示某些主管

因此,我将该条件移到了COUNTIF中,替换了IFNULLCOUNT的内容

如果您的数据存储方式使您需要考虑到不同的情况,下面将介绍这种情况

这里您不将不同的员工ID计算为员工总数


我有一个问题,这里你没有把不同的员工ID计算为员工总数,你只是在计算有条件的日期。但是为什么结果是正确的呢?很高兴它对你有用。请考虑接受和投票!在您的问题中,您没有寻找distinct,因此我尽可能完整地保留了原始查询。请参阅我答案中的更新,以解决不同的问题。同时,请接受这个问题和之前你得到答案的问题。如果你有新问题,请投赞成票,这样我们会有动力回答你的问题-请发布新问题!!!这些都是没有必要的无效已被接受的答案!请考虑!!谢谢你,我很感激你听到了我的话!我真的喜欢!我期待着你的下一个问题,并试着回答它
#standardSQL
SELECT
  Supervisor,
  COUNT(DISTINCT 
    IF(
      (Last_hire_date < DATE '2018-01-01' AND term_date >=  DATE '2018-01-01' ) 
      OR 
      (Last_hire_date < DATE'2018-01-01' AND term_date IS NULL),
      EmpID,
      NULL
    )
  ) AS start_headcount  
FROM 
  `T1`
GROUP BY
  1
ORDER BY
  1 ASC