mysql - SQL选择计算

标签 mysql sql sql-server sql-server-2008 sql-server-2005

Below are the things I'm using

我正在尝试使用 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.)

Click for 5 selects image

(第一) 主体选择:

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.

Incorrect Images

Below is what it should return when i run the select for totals i don't know what i did wrong.

Correct Image

最佳答案

仅查看BA列的总值,很明显您没有进行与它们相同的计算,您应该计算列总和之间的比率,而不是计算平均值HAB

所以替换

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/

相关文章:

java - 为什么我在关系字段中得到空值?

mysql - 在 MySQL 数据库中创建表时出现语法错误

sql-server - 循环遍历 SQL Server 中的日期范围

mysql - 使用 split 函数加速 Mysql 查询

python - 无法使用 Python 的 MYSQLdb 模块将行添加到数据库

MySQL 在 PERL 中对 VARCHAR 选择计数

php - 无论单词的顺序如何,如何匹配 mySQL 结果中的单词?

php - SQL:获取属于 SUM 中不同值的正确 ID

.net - 获取 SQL Server CLR 运行时中引发的错误的行号

SQL 更新列以等于连接中的列并使用子查询