在 case 语句中选择多个组

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

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

国家 勋章 计数
美国 黄金 3
可以 黄金 2schema

answer

sql oracle case schema
2个回答
0
投票

假设数据集包含一个名为 Country 的列,其值为“CAN”、“USA”、“MEX”,以及一个名为 Medal 的列,其类型为 medal,下面是一个 SQL 语句,它将显示国家的全名并根据数据对数据进行排序勋章上:

选择 案例国家 当'可以'然后'加拿大' 当'美国'然后'美利坚合众国' 当'MEX'然后'墨西哥' 其他国家 结束为 Full_Country, 勋章 FROM 表名 按勋章订购;

将 table_name 替换为实际表的名称。此语句将返回包含两列的数据集:Full_Country(带有国家全名)和 Medal。 CASE 语句检查 Country 列的值并返回相应的全名。如果 Country 的值不是“CAN”、“USA”或“MEX”,则语句将返回 Country 的原始值。然后根据 Medal 列对数据集进行排序。


0
投票

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

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 
© www.soinside.com 2019 - 2024. All rights reserved.