oracle 在case语句中选择多个组

44u64gxh  于 2023-03-29  发布在  Oracle
关注(0)|答案(2)|浏览(192)

显示2000年CAN、USA和MEX的奖牌数。编写CASE语句以在输出数据集中显示国家的全名。CAN:加拿大、美国:美利坚合众国和墨西哥:墨西哥。根据勋章对数据进行排序。
如何通过显示三列来解决这个问题。我的答案是显示无效的关系运算符。答案中有什么需要修复的?
| 国家|奖章|计数|
| --------------|--------------|--------------|
| 美国|黄金|三|
| 加拿大|黄金|2 schema|
answer

bgtovc5b

bgtovc5b1#

如果你的数据看起来像这里...

WITH
    tbl (NOC, MEDAL) AS
        (
            Select 'USA', 'Gold'    From Dual Union All
            Select 'MEX', 'Silver'  From Dual Union All
            Select 'CAN', 'Gold'    From Dual Union All
            Select 'MEX', 'Bronze'  From Dual Union All
            Select 'USA', 'Gold'    From Dual Union All
            Select 'USA', 'Bronze'  From Dual Union All
            Select 'USA', 'Gold'    From Dual 
        )

...如果你想计算一个国家赢得了多少特定的奖牌,那么你可以使用Count()Over()分析函数,使用DISTINCT关键字来消除重复。在大型数据集的情况下,DISTINCT可能会导致性能开销。

SELECT DISTINCT
          Case  When NOC = 'CAN'    Then 'Canada'
                When NOC = 'MEX'    Then 'Mexico'
                When NOC = 'USA'    Then 'United States of America'
          Else  NOC
          End "COUNTRY",
          MEDAL "MEDAL",
          Count(MEDAL) Over(Partition By NOC, MEDAL) "MEDAL_COUNT"
FROM    tbl
ORDER BY Case MEDAL 
                WHEN 'Gold' THEN 1
                WHEN 'Silver' THEN 2
         Else 3
         End
--
--  R e s u l t :
COUNTRY                  MEDAL  MEDAL_COUNT
------------------------ ------ -----------
United States of America Gold             3 
Canada                   Gold             1 
Mexico                   Silver           1 
Mexico                   Bronze           1 
United States of America Bronze           1

如果你想计算每个国家的奖牌总数,那么:

SELECT    Case  When NOC = 'CAN'    Then 'Canada'
                When NOC = 'MEX'    Then 'Mexico'
                When NOC = 'USA'    Then 'United States of America'
          Else  NOC
          End "COUNTRY",
          Count(MEDAL) "TOTAL_MEDALS"
FROM    tbl
GROUP BY  NOC  
ORDER BY  Count(MEDAL) DESC
--
--  R e s u l t :
COUNTRY                  TOTAL_MEDALS
------------------------ ------------
United States of America            4 
Mexico                              2 
Canada                              1
vu8f3i0k

vu8f3i0k2#

假设数据集包含一个名为Country的列,其值为“CAN”,“USA”,“MEX”,以及一个名为Medal的列,其类型为奖牌,下面是一个SQL语句,它将显示国家的全名并根据奖牌对数据进行排序:
SELECT CASE国家WHEN 'CAN' THEN 'Canada' WHEN 'USA' THEN 'United States of America' WHEN 'MEX' THEN 'Mexico' ELSE国家END AS Full_Country,Medal FROM table_name ORDER BY Medal;
将table_name替换为实际表的名称。此语句将返回一个包含两列的数据集:Full_Country(带有国家的全名)和Medal。CASE语句检查Country列的值并返回相应的全名。如果Country的值不是“CAN”、“USA”或“MEX”,则该语句将返回Country的原始值。然后,数据集将根据Medal列进行排序。

相关问题