我有以下 PL/SQL 代码:
SELECT COUNT(CASE WHEN upper(team) = 'TEAM ONE' THEN 1 END) TEAM_ONE,
COUNT(CASE WHEN upper(team) = 'TEAM TWO' THEN 1 END) TEAM_TWO
from TeamMembers WHERE UPPER(TEAM_NAME) = UPPER('My Team')
第一队有 8 名成员,第二队有 2 名成员。代码返回:
第一队:8人 第二队:10
显然,两列的计数都在求和。显然,我对计数函数的工作原理并不清楚,但我在网上找到的所有信息都不足以解决这个问题。有人知道发生了什么事以及我如何编写此代码以正确返回每个团队的计数吗?
这在我的 19c 数据库上运行得很好。
你用的是哪个版本?
with
TeamMembers(team_name, team) as (
select 'My Team', 'TEAM ONE' from dual
union all
select 'My Team', 'TEAM ONE' from dual
union all
select 'My Team', 'TEAM ONE' from dual
union all
select 'My Team', 'TEAM TWO' from dual
union all
select 'My Team', 'TEAM TWO' from dual
)
SELECT count(CASE WHEN upper(team) = 'TEAM ONE' THEN 1 END) TEAM_ONE,
count(CASE WHEN upper(team) = 'TEAM TWO' THEN 1 END) TEAM_TWO
from TeamMembers
WHERE UPPER(TEAM_NAME) = UPPER('My Team') ;
使用
sum()
而不是 count()
,因为 count()
还将包含 null
值