条件计数返回错误结果

问题描述 投票:0回答:2

我有以下 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

显然,两列的计数都在求和。显然,我对计数函数的工作原理并不清楚,但我在网上找到的所有信息都不足以解决这个问题。有人知道发生了什么事以及我如何编写此代码以正确返回每个团队的计数吗?

sql oracle oracle11g
2个回答
0
投票
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'
    );

0
投票

这在我的 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') ;
© www.soinside.com 2019 - 2024. All rights reserved.