我有以下 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 名成员。代码返回:
Team One: 8
Team Two: 10
显然,两列的计数都在求和。显然,我对计数函数的工作原理并不清楚,但我在网上找到的所有信息都不足以解决这个问题。有人知道发生了什么事以及我如何编写此代码以正确返回每个团队的计数吗?
SELECT
*
FROM
(
SELECT
COUNT(1) AS team_one_cnt
FROM
teammembers
WHERE
upper(team_name) = upper('My Team')
AND upper(team) = 'TEAM ONE'
UNION ALL
SELECT
COUNT(1) AS team_two_cnt
FROM
teammembers
WHERE
upper(team_name) = upper('My Team')
AND upper(team) = 'TEAM TWO'
);
这在我的 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') ;