我正在为实习而练习,我也参加了一些棒球比赛。在一个视图上工作会给我一些像average和obp这样的东西。我收到错误,有人能告诉我语法有什么问题吗?
CREATE VIEW `Master Batter 2009 - 2013` AS
select (select * from baseball.batting),
(select Sum(H)/Sum(AB) from baseball.batting) as 'Average',
(select (Sum(H)+Sum(BB)+Sum(HBP))/(Sum(AB)+Sum(BB)+Sum(HBP)+Sum(SF))) as 'OBP',
join baseball.master
on baseball.master.playerID = baseball.batting.playerID
where yearID = '2013'
Group By playerID
答案 0 :(得分:2)
以下是一些错误的列表(某些语法无效,有些只是违反最佳做法。)
使用包含空格,短划线和/或其他特殊字符的标识符(例如视图名称)在语法上是有效的,但这些方法太有用而无法使用
查询没有FROM子句(JOIN
关键字出现在我们希望FROM
关键字的位置)
在SELECT列表中的最后一项之后的额外逗号
ON
子句仅在JOIN
之后有效,后者需要前一个FROM
ON
子句中的谓词引用无效标识符baseball.batting
不是对表,视图或行源别名的有效引用(在查询的FROM子句中引用)
SELECT列表中的第一项可以是子查询,但子查询最多可返回一列,最多返回一行
对H
,AB
,player_id
的引用都是不合格的;最佳做法是限定所有列引用
标识符和别名应该用反引号括起来,而不是单引号
我建议您在使用CREATE VIEW
缺少表定义(哪些列在哪些表中),几乎不可能破译你想要完成的任务。
我想你想要这样的东西:
SELECT m.player_id AS `player_id`
, SUM(b.H)/SUM(b.AB) AS `Average`
, (SUM(b.H)+SUM(b.BB)+SUM(b.HBP))/(SUM(b.AB)+SUM(b.BB)+SUM(b.HBP)+SUM(b.SF))) AS `OBP`
FROM baseball.master m
LEFT
JOIN baseball.batting b
ON b.player_id = m.player_id
AND b.yearID = 2013
GROUP BY m.playerID
请注意,您可能需要处理一些边缘情况...除以零,添加NULL会导致NULL等等。