【问题标题】:How do I calculate the averages of all the columns?如何计算所有列的平均值?
【发布时间】:2011-05-29 01:52:21
【问题描述】:

我正在处理一个包含 100 多列的表,其中许多列是布尔值以防万一,因为我需要使用 avg(variable_name::int) 来获取每个布尔列的平均值。

现在,我想同时取所有列的平均值。我该怎么做?

非常感谢。

我会尽量说得更清楚: 我想要从 A 到 ZZ 的所有变量的所有平均值。其中一些是整数,一些是布尔值,这就是我提到布尔值的唯一原因。

PK     A  **** GZ ***   ZZ
--------------------------
1      T  ****  F ***    T
2      T  ****  F ***    T
3      F  ****  T ***    T
4      F  ****  F ***    F
5      T  ****  F ***    T

【问题讨论】:

  • 听起来你应该标准化你的数据库。 :-(
  • 您能更好地向我解释一下吗?谢谢 ; )我想我知道规范化是什么,但我不明白为什么如果我规范化它会解决我的问题。我对此很陌生。
  • 基本上,没有很多合理的理由来拥有一个包含 100 多列的表,您可能会在其中复制大量数据,而这些数据在其他表中会更好。谷歌围绕“数据库规范化”、“数据建模”等。
  • 将信息增长到行,而不是列。规范化你的数据库

标签: sql postgresql average


【解决方案1】:

没有真正的偷偷摸摸或棘手的方法来做到这一点。您也许可以使用数据字典构建动态查询,但确实不建议这样做。

如果您确实需要 100 个不同列的平均值,您将不得不输入 avg() 100 次。

我确实同意上述评论,但是,您的数据库很可能会从一些规范化中受益匪浅。如果您有一堆名为“Something##”的列,其中## 是一系列数字,则尤其如此。

【讨论】:

  • 为什么不建议使用数据字典构建动态查询?谢谢。
【解决方案2】:

也许我不明白你的问题。如果你从这样的表开始:

PK A -------- 1吨 2吨 3楼 4楼 5吨

对于“A 列的平均值是多少?”这个问题,您希望得到什么答案?

【讨论】:

  • 我也不明白这个问题。布尔值的平均值是多少?有点真实?不是很假?
  • 我编辑了原始帖子,我想要从 A 到 ZZ 的平均值。 :) 谢谢!
  • 如果列允许空值,“百分比标记为真”是模糊的。如果你平均上面的 A 列(使用 avg(cast("A" as integer)))你会得到 0.6。但是,如果“3”行是 null 而不是 FALSE,则相同的查询将返回 0.75。
猜你喜欢
  • 2017-04-18
  • 2020-12-07
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 2019-05-20
  • 2019-02-23
相关资源
最近更新 更多