sql - SQL 一个字段计数其他字段的聚合
问题描述
无论任何标准如何,我都需要计算单元总数,还要标记在给定日期完成 3 个以上工作单元的人。
这是一个示例表和伪代码:
DATE|PERSON|JOB_NO
1/1/2020 | M | 01
1/1/2020 | M | 02
1/1/2020 | N | 03
1/1/2020 | M | 04
伪代码:
SELECT DATE, COUNT(ALL UNITS), COUNT(DISTINCT PERSON WHERE PERSON DID MORE THAN 3+ UNITS)
FROM DB
GROUP BY DATE
因此,从表中 M 做了 3 份工作,所以他们算在内,但 N 做了 1 份工作,所以他们没有得到:
1/1/2020 | 4 | 1
解决方案
我想有人已经正确回答了这个问题,但你去吧
drop table #tmp
create table #tmp
(
[date] date
, person char(1)
, jobno int
);
insert into #tmp
( date, person, jobno )
values ('1/1/2020', 'm',1), ('1/1/2020', 'm',2), ('1/1/2020', 'n',1), ('1/1/2020', 'm',3)
SELECT
DATE,
COUNT(*),
(SELECT COUNT(distinct person) FROM #tmp GROUP BY person, date HAVING COUNT(*)>=3)
FROM #tmp
GROUP BY DATE