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
这会将总数放在结果的最后一行。
使用 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
这会将总数放在结果的最后一行。