当前位置: 首页 > 知识库问答 >
问题:

如何用一个SQL查询得到多个计数?

暨弘毅
2023-03-14

我想知道如何编写这个查询。

我知道这个实际的语法是假的,但它会帮助你理解我想要什么。我需要它的这种格式,因为它是一个大得多的查询的一部分。

SELECT distributor_id, 
COUNT(*) AS TOTAL, 
COUNT(*) WHERE level = 'exec', 
COUNT(*) WHERE level = 'personal'

我需要这所有返回在一个查询。

此外,它需要在一行中,因此以下操作将不起作用:

'SELECT distributor_id, COUNT(*)
GROUP BY distributor_id'

共有3个答案

温亮
2023-03-14
SELECT 
    distributor_id, 
    COUNT(*) AS TOTAL, 
    COUNT(IF(level='exec',1,null)),
    COUNT(IF(level='personal',1,null))
FROM sometable;

count仅对非空值进行计数,并且decode仅在满足您的条件时才返回非空值1

宋健柏
2023-03-14

有一种方法是肯定有效的

SELECT a.distributor_id,
    (SELECT COUNT(*) FROM myTable WHERE level='personal' and distributor_id = a.distributor_id) as PersonalCount,
    (SELECT COUNT(*) FROM myTable WHERE level='exec' and distributor_id = a.distributor_id) as ExecCount,
    (SELECT COUNT(*) FROM myTable WHERE distributor_id = a.distributor_id) as TotalCount
FROM (SELECT DISTINCT distributor_id FROM myTable) a ;

编辑:
请参阅@kevinbalmforth的性能分解,了解为什么您可能不想使用这种方法,而应该选择@taryn♦的答案。我离开这里是为了让人们明白他们的选择。

弘焕
2023-03-14

可以将case语句与聚合函数一起使用。这与某些RDBMS中的pivot函数基本相同:

SELECT distributor_id,
    count(*) AS total,
    sum(case when level = 'exec' then 1 else 0 end) AS ExecCount,
    sum(case when level = 'personal' then 1 else 0 end) AS PersonalCount
FROM yourtable
GROUP BY distributor_id
 类似资料:
  • 问题内容: 我想知道如何编写此查询。 我知道这个实际的语法是虚假的,但是它将帮助您理解我想要的。我需要这种格式,因为它是更大查询的一部分。 我需要所有这些都在一个查询中返回。 此外,它必须排成一排,因此以下内容将不起作用: 问题答案: 您可以将语句与聚合函数一起使用。这与某些RDBMS中的函数基本相同:

  • 问题内容: 我有一个表,它与其他表具有多个一对多的关系。假设主表是一个人,其他表则代表宠物,汽车和儿童。我想要一个查询,该查询返回人员的详细信息,他们拥有的宠物,汽车和儿童的数量,例如 做这个的最好方式是什么? 问题答案: 子查询分解(9i +): 使用内联视图:

  • 问题内容: 我很难优化我的SQLAlchemy查询。我的SQL知识非常基础,我无法从SQLAlchemy文档中获得所需的知识。 假设以下非常基本的一对多关系: 我怎么能: 查询每个父母的元组? 经过相当长的搜索时间后,我发现了如何分别查询这些值: 我试图以不同的方式将它们组合在一起,但没有设法得到我想要的。 查询所有顽皮孩子超过80%的父母?编辑:顽皮可能为NULL。 我猜想此查询将基于上一个查询

  • 我现在在大学学习数据库,在我的项目中,我有3个表:、和 联赛(leagueId,leagueName) 团队(teamId,teamName) 具有(leagueId,teamId,year)

  • 我有两个查询,它们都是分开工作的,但是当我尝试统一下摆时,我只有问题。 查询1: 查询 2: 如何根据(内部一)统一它们?