Sql子查询比较两个计数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sql子查询比较两个计数相关的知识,希望对你有一定的参考价值。
我有以下查询返回具有类型“C”的寄存器的所有人以及具有类型“C”的每个人的行数。每个人都可以输入'C'或输入'V'
select count(type), number_document
from register
where type = 'C'
group by number_document ;
我想只返回他所有行都有类型'C'的人,所以我需要做一个子查询,将总行数与count(类型)进行比较。
我不知道如何在这里引入子查询。
答案
您可以使用NOT EXISTS来排除同样具有“V”类型的用户:
select count(type), number_document
from register ro
where type = 'C'
AND NOT EXISTS
(SELECT TOP 1 NULL
FROM register ri
WHERE ri.User = ro.User
AND ri.type='V')
group by number_document;
另一答案
这对你有用吗?
select count(r.type), r.number_document
from register r
where r.type = 'C' AND NOT EXISTS (
SELECT *
FROM register r2
WHERE r.number_document = r2.number_document AND r2.type <> 'C'
)
group by r.number_document ;
另一答案
下面的查询有两个条件
- 过滤寄存器,所有'类型'值都相同
- 然后筛选'C'类型的人
select count(r.type), r.number_document from register r where r.type = ALL ( SELECT r2.type FROM register r2 WHERE r.number_document = r2.number_document ) AND r.type = 'C' group by r.number_document ;
另一答案
这个怎么样? HAVING子句检查唯一的TYPE列值是否为'C'(因为MIN = MAX = C)。
select number_document, count(*)
from register
group by number_document
having min(type) = max(type) and min(type) = 'C';
以上是关于Sql子查询比较两个计数的主要内容,如果未能解决你的问题,请参考以下文章