SQL/Python在SQL中进行多重选择和计算

2024-09-26 22:52:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个从MLB gameday XML feed抓取的逐局数据数据库。你知道吗

我希望能够得到一份打击平均数和其他统计数据的清单,但我被卡住了。你知道吗

我有一个事件表(每个在bat),它的设置如下

  `event_id` int(15) NOT NULL AUTO_INCREMENT,
  `game_id` int(8) NOT NULL,
  `batter` int(8) NOT NULL,
  `pitcher` int(8) NOT NULL,
  `inning` int(3) NOT NULL,
  `event` varchar(25) NOT NULL,
  `outs` int(1) NOT NULL,
  `rbi` int(1) NOT NULL,
  `home_runs` int(3) NOT NULL,
  `away_runs` int(3) NOT NULL,
  `batting_team` int(3) NOT NULL,
  `b1` int(6) NOT NULL,
  `b2` int(6) NOT NULL,
  `b3` int(6) NOT NULL,
  `pitch_detail` varchar(200) NOT NULL,
  PRIMARY KEY (`event_id`)

和一个players表,它只保存player\u id、first\u name、last\u name和team\u id的记录

我的SQL语言非常有限,而且只有

SELECT players.first_name, players.last_name, count(events.event), events.event
FROM mlb.events
JOIN mlb.players
ON mlb.players.player_id = mlb.events.batter
WHERE team_id = %s
GROUP BY events.batter, events.event
ORDER BY mlb.events.batter, events.event

这将返回如下列表

('Henry', 'Blanco', 3L, 'Flyout')
('Henry', 'Blanco', 4L, 'Groundout')
('Henry', 'Blanco', 4L, 'Single')
('Henry', 'Blanco', 5L, 'Strikeout')

为每个玩家。你知道吗

我可以将其提取到python中并使其可用,但我认为一定有我可以编写的SQL可以为我做到这一点。我需要计算命中率/(出局+命中率)来给我他的平均值。我想要的是如下。你知道吗

('Henry', 'Blanco', 0.285)

举个简单的例子,我们只需要说唯一的出局是飞人,地滚球,三振,安打是单打,双打,三振和本垒打。你知道吗

非常感谢任何帮助或指导。你知道吗


Tags: nameeventidrunsnoteventsnullteam
1条回答
网友
1楼 · 发布于 2024-09-26 22:52:25

我建议创建另一个包含事件的表,以及它们是用完还是用完。然后你就可以加入桌子了。你知道吗

但即使不这样做,您也可以这样编写查询:

SELECT players.first_name, players.last_name,
  SUM(CASE events.event
        WHEN 'Single' THEN 1
        WHEN 'Double' THEN 1
        WHEN 'Triple' THEN 1
        WHEN 'Home Run' THEN 1
        ELSE 0
      END)
  / COUNT(events.event) AS avg
FROM mlb.events
JOIN mlb.players
ON mlb.players.player_id = mlb.events.batter
WHERE team_id = %s
GROUP BY events.batter
ORDER BY mlb.events.batter

相关问题 更多 >

    热门问题