我想知道如何编写这个查询。
我知道这个实际的语法是假的,但它会帮助你理解我想要什么。我需要它的这种格式,因为它是一个大得多的查询的一部分。
SELECT distributor_id,
COUNT(*) AS TOTAL,
COUNT(*) WHERE level = 'exec',
COUNT(*) WHERE level = 'personal'
我需要这所有返回在一个查询。
此外,它需要在一行中,因此以下操作将不起作用:
'SELECT distributor_id, COUNT(*)
GROUP BY distributor_id'
SELECT
distributor_id,
COUNT(*) AS TOTAL,
COUNT(IF(level='exec',1,null)),
COUNT(IF(level='personal',1,null))
FROM sometable;
count
仅对非空
值进行计数,并且decode
仅在满足您的条件时才返回非空值1
。
有一种方法是肯定有效的
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♦的答案。我离开这里是为了让人们明白他们的选择。
可以将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: 如何根据(内部一)统一它们?