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
)
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
假设数据集包含一个名为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列进行排序。
2条答案
按热度按时间bgtovc5b1#
如果你的数据看起来像这里...
...如果你想计算一个国家赢得了多少特定的奖牌,那么你可以使用Count()Over()分析函数,使用DISTINCT关键字来消除重复。在大型数据集的情况下,DISTINCT可能会导致性能开销。
如果你想计算每个国家的奖牌总数,那么:
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列进行排序。