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 选择计算的主要内容,如果未能解决你的问题,请参考以下文章

选择或计算所有行时 Sql 表无响应

Spark SQL - 选择所有 AND 计算列?

在选择语句计算Oracle SQL中使用列别名[重复]

SQL查询和计算;正确格式化查询以仅选择 id

MS-SQL - 每个选择命令计算数据库中每个表的所有行[重复]

从客户表中选择具有条件的客户 ID 并计算使用日志表 - SQL 放置的所有日志