SQL return 个不同的值及其在一个查询中的组合计数

SQL return distinct values and their combined count in one query

使用 MySQL 并且我应该 return 缺席人数及其姓名。我对所有学生进行查询并减去当天出现的学生的子查询。

这甚至可以在 1 个查询中完成吗?我知道如何使用 2 个单独的语句来实现它们 return 不同大小的语句,所以我不确定它们是否兼容。

姓名列表:

select distinct name 
from submissions join hacker
on submissions.hacker_id=hacker.hacker_id
where name not in
(
  select distinct name 
from submissions join hacker
on submissions.hacker_id=hacker.hacker_id
where sub_date = '2019-12-07'  
  )

计数:

select count(name) 
from submissions join hacker
on submissions.hacker_id=hacker.hacker_id
where name not in
(
  select distinct name 
from submissions join hacker
on submissions.hacker_id=hacker.hacker_id
where sub_date = '2019-12-07'  
  )

您可以使用 CTE 执行一次查询,然后使用 UNION 将计数和名称组合成一个结果。

WITH absentees as (select distinct name 
    from submissions join hacker
    on submissions.hacker_id=hacker.hacker_id
    where name not in
    (
      select distinct name 
    from submissions join hacker
    on submissions.hacker_id=hacker.hacker_id
    where sub_date = '2019-12-07'  
    )
)
SELECT * FROM absentees
UNION ALL
SELECT COUNT(*) FROM absentees

这会将总数放在结果的最后一行。