这个例子是在live sql上看到的.具体网址:https://livesql.oracle.com/apex/f?p=590:49
好像要注册一个Oracle账号
create table olympic_medal_winners (
olympic_year int,
sport varchar2( 30 ),
gender varchar2( 1 ),
event varchar2( 128 ),
medal varchar2( 10 ),
noc varchar2( 3 ),
athlete varchar2( 128 )
);
Insert into olympic_medal_winners (OLYMPIC_YEAR,SPORT,GENDER,EVENT,MEDAL,NOC,ATHLETE) values (2016,'Archery','M','Men''s Individual','Gold','KOR','KU Bonchan');
Insert into olympic_medal_winners (OLYMPIC_YEAR,SPORT,GENDER,EVENT,MEDAL,NOC,ATHLETE) values (2016,'Archery','M','Men''s Individual','Silver','FRA','VALLADONT Jean-Charles');
Insert into olympic_medal_winners (OLYMPIC_YEAR,SPORT,GENDER,EVENT,MEDAL,NOC,ATHLETE) values (2016,'Archery','M','Men''s Individual','Bronze','USA','ELLISON Brady');
Insert into olympic_medal_winners (OLYMPIC_YEAR,SPORT,GENDER,EVENT,MEDAL,NOC,ATHLETE) values (2016,'Archery','M','Men''s Team','Gold','KOR','Republic of Korea');
Insert into olympic_medal_winners (OLYMPIC_YEAR,SPORT,GENDER,EVENT,MEDAL,NOC,ATHLETE) values (2016,'Archery','M','Men''s Team','Bronze','AUS','Australia');
Insert into olympic_medal_winners (OLYMPIC_YEAR,SPORT,GENDER,EVENT,MEDAL,NOC,ATHLETE) values (2016,'Archery','M','Men''s Team','Silver','USA','United States');
Insert into olympic_medal_winners (OLYMPIC_YEAR,SPORT,GENDER,EVENT,MEDAL,NOC,ATHLETE) values (2016,'Artistic Gymnastics','M','Men''s Floor Exercise','Gold','GBR','WHITLOCK Max');
Insert into olympic_medal_winners (OLYMPIC_YEAR,SPORT,GENDER,EVENT,MEDAL,NOC,ATHLETE) values (2016,'Artistic Gymnastics','M','Men''s Floor Exercise','Bronze','BRA','MARIANO Arthur');
Insert into olympic_medal_winners (OLYMPIC_YEAR,SPORT,GENDER,EVENT,MEDAL,NOC,ATHLETE) values (2016,'Artistic Gymnastics','M','Men''s Floor Exercise','Silver','BRA','HYPOLITO Diego');
SQL> select * from olympic_medal_winners;
OLYMPIC_YE SPORT GENDER EVENT MEDAL NOC ATHLETE
---------- ------------------------------ ------ -------------------- ---------- --- ------------------------------
2016 Archery M Men's Individual Gold KOR KU Bonchan
2016 Archery M Men's Individual Silver FRA VALLADONT Jean-Charles
2016 Archery M Men's Individual Bronze USA ELLISON Brady
2016 Archery M Men's Team Gold KOR Republic of Korea
2016 Archery M Men's Team Bronze AUS Australia
2016 Archery M Men's Team Silver USA United States
2016 Artistic Gymnastics M Men's Floor Exercise Gold GBR WHITLOCK Max
2016 Artistic Gymnastics M Men's Floor Exercise Bronze BRA MARIANO Arthur
2016 Artistic Gymnastics M Men's Floor Exercise Silver BRA HYPOLITO Diego
'
#####################################################################################################################################################################################
#计算奖牌数
select * from olympic_medal_winners
pivot ( count(*) for medal in (
'Gold' gold, 'Silver' silver, 'Bronze' bronze
))
order by noc;
OLYMPIC_YE SPORT GENDER EVENT NOC ATHLETE GOLD SILVER BRONZE
---------- ------------------------------ ------ -------------------- --- ------------------------------ ---------- ---------- ----------
2016 Archery M Men's Team AUS Australia 0 0 1
2016 Artistic Gymnastics M Men's Floor Exercise BRA HYPOLITO Diego 0 1 0
2016 Artistic Gymnastics M Men's Floor Exercise BRA MARIANO Arthur 0 0 1
2016 Archery M Men's Individual FRA VALLADONT Jean-Charles 0 1 0
2016 Artistic Gymnastics M Men's Floor Exercise GBR WHITLOCK Max 1 0 0
2016 Archery M Men's Individual KOR KU Bonchan 1 0 0
2016 Archery M Men's Team KOR Republic of Korea 1 0 0
2016 Archery M Men's Individual USA ELLISON Brady 0 0 1
2016 Archery M Men's Team USA United States 0 1 0
'
SQL> select * from (
2 select noc, medal, sport, event, gender, athlete
3 from olympic_medal_winners
4 )
5 pivot (
6 count( distinct sport ||'#'|| event ||'#'|| gender ) medals,
7 count( distinct sport ) sports,
8 listagg( athlete, ',') within group (order by athlete) athletes
9 for medal in ( 'Gold' gold )
10 )
11 where gold_medals > 1
12 order by gold_medals, gold_sports, noc;
NOC GOLD_MEDALS GOLD_SPORTS GOLD_ATHLETES
--- ----------- ----------- --------------------------------------------------------------------------------
KOR 2 1 KU Bonchan,Republic of Korea
####################################################################################################################################################################################
create table olympic_medal_tables as
select * from (
select noc, medal, sport, event, gender
from olympic_medal_winners
)
pivot ( count(distinct sport ||'#'|| event ||'#'||gender ) for medal in
(
'Gold' gold_medals, 'Silver' silver_medals, 'Bronze' bronze_medals
)
)
order by 2 desc, 3 desc, 4 desc;
SQL> select * from olympic_medal_tables
2 ;
NOC GOLD_MEDALS SILVER_MEDALS BRONZE_MEDALS
--- ----------- ------------- -------------
KOR 2 0 0
GBR 1 0 0
BRA 0 1 1
USA 0 1 1
FRA 0 1 0
AUS 0 0 1
select * from olympic_medal_tables
unpivot (medal_count for medal_colour in
(
gold_medals as 'GOLD',
silver_medals as 'SILVER',
bronze_medals as 'BRONZE'
)
)
order by noc;
SQL> select * from olympic_medal_tables
2 unpivot (medal_count for medal_colour in (
3 gold_medals as 'GOLD',
4 silver_medals as 'SILVER',
5 bronze_medals as 'BRONZE'
6 ))
7 order by noc;
NOC MEDAL_COLOUR MEDAL_COUNT
--- ------------ -----------
AUS SILVER 0
AUS GOLD 0
AUS BRONZE 1
BRA BRONZE 1
BRA SILVER 1
BRA GOLD 0
FRA SILVER 1
FRA GOLD 0
FRA BRONZE 0
GBR SILVER 0
GBR BRONZE 0
GBR GOLD 1
KOR SILVER 0
KOR BRONZE 0
KOR GOLD 2
USA SILVER 1
USA GOLD 0
USA BRONZE 1