Below are the things I'm using
2015 SQL version of the database.
Microsoft SQL server management studio v17.7
I'm using "Los Angeles Dodgers" statistics and I'm basing my selects of the website and pulling from the above database Website for ESPN Los Angeles Dodgers
我正在尝试使用 7 个单独的选择语句重新创建网站。我目前对第二个选择语句有疑问,第二个选择语句的目的是在底部提供总计行,就像在网站上一样。
( So my main question is can someone help with fixing my second select.)
( My second question can i get some assistance on creating 5 other selects statements that correspond with the image below.)
(第一) 主体选择:
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
(第二) 总选择:
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'
Here's what my total select returns and its incorrect.
Below is what it should return when i run the select for totals i don't know what i did wrong.
最佳答案
仅查看BA
列的总值,很明显您没有进行与它们相同的计算,您应该计算列总和之间的比率,而不是计算平均值H
和 AB
所以替换
AVG((H * 1.0) / (CASE
WHEN AB = 0 THEN 1
ELSE AB
END)) AS 'BA',
与
SUM(H) / SUM(AB) AS 'BA'
我没有检查其他不正确的列,但我认为这是同样的问题。
关于mysql - SQL选择计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50904112/