Sql子查询比较两个计数

问题描述 投票:0回答:4

我有以下查询返回具有类型“C”的寄存器的所有人以及具有类型“C”的每个人的行数。每个人都可以输入'C'或输入'V'

select count(type), number_document 
from register 
where type = 'C' 
group by number_document ;

我想只返回他所有行都有类型'C'的人,所以我需要做一个子查询,将总行数与count(类型)进行比较。

我不知道如何在这里引入子查询。

sql count subquery
4个回答
0
投票

您可以使用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;

0
投票

这对你有用吗?

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 ;

0
投票

下面的查询有两个条件

  1. 过滤寄存器,所有'类型'值都相同
  2. 然后筛选'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 ;

0
投票

这个怎么样? 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';
© www.soinside.com 2019 - 2024. All rights reserved.