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 ;
另一答案

下面的查询有两个条件

  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 ;
另一答案

这个怎么样? 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子查询比较两个计数的主要内容,如果未能解决你的问题,请参考以下文章

SQL:当一列有最大/计数子查询时,我可以编写多列查询吗?

SQL子查询计数

转置带有子选择和计数的 sql 查询

SQL Server 2008 R2 子查询分组、求和和计数

如何在没有算术计数的SQL子查询中使用GROUP BY

SQL语句汇总(三)——聚合函数分组子查询及组合查询 - Darly