当前位置: 首页 > 面试题库 >

两个SQL COUNT()查询?

南门峰
2023-03-14
问题内容

我想同时计算一个表中的记录总数和符合某些条件的记录总数。我可以使用两个单独的查询来完成这些操作:

SELECT COUNT(*) AS TotalCount FROM MyTable;
SELECT COUNT(*) AS QualifiedCount FROM MyTable
  {possible JOIN(s) as well e.g. JOIN MyOtherTable mot ON MyTable.id=mot.id} 
  WHERE {conditions};

有没有一种方法可以将它们组合成一个查询,以便在一行中得到两个字段?

SELECT {something} AS TotalCount, 
  {something else} AS QualifiedCount 
  FROM MyTable {possible JOIN(s)} WHERE {some conditions}

如果没有,我可以发出两个查询并将它们包装在一个事务中,以便它们保持一致,但是我希望使用一个查询来完成。

编辑:我最关心原子性;如果需要两个子SELECT语句就可以,只要某个地方有INSERT,它就不会使两个响应不一致。

编辑2:CASE答案很有帮助,但在我的特定情况下,条件可能包括与另一个表的JOIN(对不起,在我的原始帖子中没有提及,对不起),所以我猜测这种方法行不通。


问题答案:

一种方法是将表与自身连接:

select
   count(*) as TotalCount,
   count(s.id) as QualifiedCount
from
   MyTable a
left join
   MyTable s on s.id = a.id and {some conditions}

另一种方法是使用子查询:

select
   (select count(*) from Mytable) as TotalCount,
   (select count(*) from Mytable where {some conditions}) as QualifiedCount

或者,您可以将条件放在一个案例中:

select
   count(*) as TotalCount,
   sum(case when {some conditions} then 1 else 0 end) as QualifiedCount
from
   MyTable


 类似资料:
  • 问题内容: 我要么变老,要么我需要写的查询变得越来越复杂。以下查询将获取与该用户的所有关联。 该表为(,,,); 现在,我还需要通过 独立查询如下所示: 但是,是否可以将这两个查询合并为一个查询?我的逻辑认为应该这样,尽管我不知道如何进行实际的JOIN。 问题答案: 我可能会使用UNION。

  • 问题内容: 两个查询都一样吗?两者返回相同的结果吗? 1) 2) 问题答案: 它们不一样。 第二个返回 两个 条件的数据。 第一个首先测试,并且仅适用一个条件

  • JPQl是jpa中的新成员,我想查询两个实体中的所有字段,然后使用实体类getter访问数据。 错误 异常[EclipseLink-0](Eclipse持久性服务-2.5.0.v20130507-3faac2b): org.Eclipse.Persistence.exceptions。JPQLException<br>异常描述:语法错误解析[SELECT u(),f()FROM User u jo

  • 我需要连接来自两个不同表的数据,如下所示。仅使用一个sql查询就可以做到这一点吗?如果“key”和“name”在两个表上,那么它们是相同的。表1中的“状态”始终为“-”,表2中的“T”。此外,两个表上的“名称”和“comp”都匹配(例如:Name3-C和Name4-B)<我尝试过“联合”和“加入”,但还没有解决办法! 表1 表2 结果应该是。。。 提前谢谢!

  • 我有两个表与1:1的关系,我使用内容提供者和CursorLoader。 如何使连接查询与游标加载器一起工作?我可以用内容提供程序中的rawSql来黑它,但如何在游标加载器构造函数中做就不是我能做到的了。 多谢!

  • 我有一个很大的表,大约1米的记录,我想对所有的记录做一些处理,所以1个线程的方式,就是说。。。1000条记录,处理它们,再获得1000条记录等等。。。但如果我想使用多任务处理呢?也就是说,两个线程分别获取1000条记录,并并行处理,如何确保每个线程将获取不同的1000条记录?注意:我正在使用hibernate 好像是这样的