Google bigquery 如何在条件选择中用0替换null
我的名单上有100名主管,我想统计一下在2018年1月1日开始时,有多少员工在他们的监督下工作 这些是我试过的密码。然而,由于主管没有员工,他们的名字就消失在表格中。我只想保留他们的姓名,如果他们没有员工,则将员工人数设置为0Google 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'
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