SQL 选择计算
Posted
技术标签:
【中文标题】SQL 选择计算【英文标题】:SQL select calculations 【发布时间】:2018-11-26 23:36:19 【问题描述】:以下是我正在使用的东西
lahman's baseball -database
2015 SQL 版本的数据库。
Microsoft SQL 服务器管理工作室 v17.7
我正在使用“洛杉矶道奇队”的统计数据,并且基于我的选择 网站并从上述数据库中提取Website for ESPN Los Angeles Dodgers
我正在尝试使用 7 个单独的选择语句重新创建网站。目前我的第二个选择语句有问题,第二个的目的是在底部提供一个总计行,就像他们在网站上所做的那样。
(所以我的主要问题是有人可以帮助修复我的第二个选择。)
(我的第二个问题我可以在创建其他 5 个方面获得一些帮助吗 选择与下图对应的语句。)
(第 1 次) 主体选择:
SELECT
nameFirst + ' ' + nameLast AS Name,
G AS GP,
AB,
R,
H,
H - B2 - B3 - HR AS S,
B2 AS '2B',
B3 AS '3B',
HR,
RBI,
(((H - B2 - B3 - HR) * 1.0) + (B2 * 2) + (B3 * 3) + (HR * 4)) AS 'TB',
BB,
SO,
SB,
(H * 1.0) / (CASE
WHEN AB = 0 THEN 1
ELSE AB
END) AS 'BA',
(CASE
WHEN (H + BB + HBP) = 0 THEN 0
ELSE ((H + BB + HBP) * 1.0)
END) / (CASE
WHEN (AB + BB + HBP) = 0 THEN 1.0
ELSE ((AB + BB + HBP) * 1.0)
END) AS 'OBP',
(CASE
WHEN (((H - B2 - B3 - HR) * 1.0) + (B2 * 2) + (B3 * 3) + (HR * 4)) = 0 THEN 0
ELSE (((H - B2 - B3 - HR) * 1.0) + (B2 * 2) + (B3 * 3) + (HR * 4))
END) / (CASE
WHEN AB = 0 THEN 1
ELSE AB
END) AS 'SLG',
(CASE
WHEN (H + BB + HBP) = 0 THEN 0
ELSE ((H + BB + HBP) * 1.0)
END) / (CASE
WHEN (AB + BB + HBP) = 0 THEN 1.0
ELSE ((AB + BB + HBP) * 1.0)
END) +
(CASE
WHEN (((H - B2 - B3 - HR) * 1.0) + (B2 * 2) + (B3 * 3) + (HR * 4)) = 0 THEN 0
ELSE (((H - B2 - B3 - HR) * 1.0) + (B2 * 2) + (B3 * 3) + (HR * 4))
END) / (CASE
WHEN AB = 0 THEN 1
ELSE AB
END) AS 'OPS'
FROM Players
LEFT OUTER JOIN Batting
ON Players.playerIDpk = Batting.playerID
WHERE teamID = 'LAN'
AND yearID = '2012'
ORDER BY BA DESC
Click Here - For Image of above select output
(第 2 次) 总选择:
SELECT
'' AS Total,
'162' AS 'GP',
SUM(AB) AS 'AB',
SUM(R) AS 'R',
SUM(H) AS 'H',
SUM(B2) AS '2B',
SUM(B3) AS '3B',
SUM(HR) AS HR,
SUM(RBI) AS RBI,
SUM((((H - B2 - B3 - HR) * 1.0) + (B2 * 2) + (B3 * 3) + (HR * 4))) AS 'TB',
SUM(BB) AS BB,
SUM(SO) AS 'SO',
SUM(SB) AS 'SB',
AVG((H * 1.0) / (CASE
WHEN AB = 0 THEN 1
ELSE AB
END)) AS 'BA',
AVG((CASE
WHEN (H + BB + HBP) = 0 THEN 0
ELSE ((H + BB + HBP) * 1.0)
END) / (CASE
WHEN (AB + BB + HBP) = 0 THEN 1.0
ELSE ((AB + BB + HBP) * 1.0)
END)) AS 'OBP',
AVG((CASE
WHEN (((H - B2 - B3 - HR) * 1.0) + (B2 * 2) + (B3 * 3) + (HR * 4)) = 0 THEN 0
ELSE (((H - B2 - B3 - HR) * 1.0) + (B2 * 2) + (B3 * 3) + (HR * 4))
END) / (CASE
WHEN AB = 0 THEN 1
ELSE AB
END)) AS 'SLG',
AVG((CASE
WHEN (((H - B2 - B3 - HR) * 1.0) + (B2 * 2) + (B3 * 3) + (HR * 4)) = 0 THEN 0
ELSE (((H - B2 - B3 - HR) * 1.0) + (B2 * 2) + (B3 * 3) + (HR * 4))
END) / (CASE
WHEN AB = 0 THEN 1
ELSE AB
END)) AS 'OPS'
FROM Players
LEFT OUTER JOIN Batting
ON Players.playerIDpk = Batting.playerID
WHERE teamID = 'LAN'
AND yearID = '2012'
这是我的总选择返回的内容及其不正确的内容。
以下是当我运行 select for totals 时它应该返回的内容,我不知道我做错了什么。
【问题讨论】:
如果有一点偏差,我很乐意为您编辑。 轻松为您提供帮助。看看***.com/help/mcve。 当问题全是关于第二个查询时,为什么还要包含第一个查询,请从问题中删除不必要的信息。 我添加了它,以便他们可以从数据库中看到我完整的选择计算语句。我马上做出改变。 【参考方案1】:仅查看 BA
列的总值,很明显您没有进行与它们相同的计算,而不是计算平均值,您应该计算列 H
和 @ 的总和之间的比率987654323@
所以替换
AVG((H * 1.0) / (CASE
WHEN AB = 0 THEN 1
ELSE AB
END)) AS 'BA',
与
SUM(H) / SUM(AB) AS 'BA'
我没有检查其他不正确的列,但我认为这是同一个问题。
【讨论】:
我也这么认为,除了当我这样做时,它在该列中返回零。 可能是整数除法问题,你试过乘以 1.0 来转换成双精度数吗?以上是关于SQL 选择计算的主要内容,如果未能解决你的问题,请参考以下文章