不幸的是,我无法完全了解前面的例子。
我正在尝试创建一个基于多年来棒球MVP投票的表格,并将其与现在可用的更客观的测量方法进行比较。我希望根据这个值看到两个排名靠前的球员之间的差异。这是代码,只展示了几年的许多
select season,division,player,rankMVP as MVP,WAR,rankWAR
from mlbmvpvoting
where (season = '1955' or season = '1956')
and rankWAR < 3
order by season,division,rankWAR
season division player MVP WAR rankWAR
1955 AL Mickey Mantle 5 9.5 1
1955 AL Al Kaline 2 9.0 2
1955 NL Willie Mays 4 9.3 1
1955 NL Duke Snider 2 8.9 2
1956 AL Mickey Mantle 1 12.9 1
1956 AL Early Wynn 13 8.5 2
1956 NL Duke Snider 10 7.7 1
1956 NL Hank Aaron 3 7.5 2
我想制作像这样的东西
season division pl_1 pl_2 MVP_1 MVP_2 WAR_1 WAR_2
1955 AL Mickey Mantle Al Kaline 5 2 9.5 9.0
1955 N Willy Mays Duke Snider 4 2 9.3 8.9
等
TIA
答案 0 :(得分:1)
使用分组和条件聚合,如下所示:
SELECT
season,
division,
pl_1 = MAX(CASE rankWAR WHEN 1 THEN player END),
pl_2 = MAX(CASE rankWAR WHEN 2 THEN player END),
MVP_1 = MAX(CASE rankWAR WHEN 1 THEN rankMVP END),
MVP_2 = MAX(CASE rankWAR WHEN 2 THEN rankMVP END),
WAR_1 = MAX(CASE rankWAR WHEN 1 THEN WAR END),
WAR_2 = MAX(CASE rankWAR WHEN 2 THEN WAR END)
FROM mlbmvpvoting
WHERE season IN ('1955', '1956')
AND rankWAR IN (1, 2)
GROUP BY season, division
ORDER BY season, division
IN
基本上比OR
和<
更加优化,因此我相应地更改了条件。
答案 1 :(得分:0)
看看这样的解决方案是否适合您:
with mlbmvpvoting (season, division, player, MVP, WAR, rankWAR) as
(
select 1955, 'AL', 'Mickey Mantle', 5, 9.5, 1 union all
select 1955, 'AL', 'Al Kaline', 2, 9.0, 2 union all
select 1955, 'NL', 'Willie Mays', 4, 9.3, 1 union all
select 1955, 'NL', 'Duke Snider', 2, 8.9, 2 union all
select 1956, 'AL', 'Mickey Mantle', 1, 12.9, 1 union all
select 1956, 'AL', 'Early Wynn', 13, 8.5, 2 union all
select 1956, 'NL', 'Duke Snider', 10, 7.7, 1 union all
select 1956, 'NL', 'Hank Aaron', 3, 7.5, 2
)
select
season,
division,
pl_1 = max(case rankWAR when 1 then player end),
pl_2 = max(case rankWAR when 2 then player end),
MVP_1 = max(case rankWAR when 1 then MVP end),
MVP_2 = max(case rankWAR when 2 then MVP end),
WAR_1 = max(case rankWAR when 1 then WAR end),
WAR_2 = max(case rankWAR when 2 then WAR end)
from mlbmvpvoting
group by season, division
order by season;