【问题标题】:How to group the outcomes of a query by the values in another column?如何按另一列中的值对查询的结果进行分组?
【发布时间】:2012-11-06 03:46:05
【问题描述】:

我有一个名为 vegetation 的表,有 2 列:
typecount

我想将计数值小于平均计数的所有行的计数和所有高于平均计数的行的计数相加。

我不知道如何在 group by 子句中反映这一点...(或其他地方?)。

我想另一种方法应该是为所有低于平均水平的数据分配一个值,为所有高于平均水平的数据分配另一个值,然后按此值分组。但我才刚开始,也不知道该怎么做。

【问题讨论】:

  • 请在所有问题中包括 PostgreSQL 版本、表定义(包括数据类型)、示例数据和预期结果。正如 Erwin 所展示的,没有答案是可能的,但如果你包含这些信息,肯定会更容易。

标签: sql postgresql case aggregate-functions


【解决方案1】:
SELECT sum(CASE WHEN ct <= x.avg_ct THEN ct ELSE 0 END) AS sum_ct_low
      ,sum(CASE WHEN ct >  x.avg_ct THEN ct ELSE 0 END) AS sum_ct_hi
FROM vegetation v
    ,(SELECT avg(ct) AS avg_ct FROM vegetation) x

平均值是单个值,您可以只CROSS JOIN对基表的子查询(逗号分隔的表列表表示交叉连接)。
然后使用简单的CASE 语句进行过滤。

我使用ct 而不是count,因为那是reserved word in SQL

【讨论】:

  • 是的,很抱歉使用计数,我试图简化我的问题。感谢您的帮助,我现在知道如何使用案例了!
  • @user1832041:没问题。我只是一直提它,所以公众会明白。
猜你喜欢
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-06
  • 2017-04-01
  • 2016-12-06
  • 2013-04-05
  • 1970-01-01
相关资源
最近更新 更多