【问题标题】:Using an aggregate function in where在 where 中使用聚合函数
【发布时间】:2014-09-19 18:58:11
【问题描述】:

我在这里看到了一些类似问题的主题,但是我找不到适合我需要的东西。

考虑下表和示例数据:

CREATE TABLE foo(a int, b int);

INSERT INTO FOO VALUES(1, 3);
INSERT INTO FOO VALUES(1, 3);
INSERT INTO FOO VALUES(1, 4);
INSERT INTO FOO VALUES(2, 5);
INSERT INTO FOO VALUES(2, 3);
INSERT INTO FOO VALUES(3, 10);

考虑这个查询:

SELECT a,
       sum(b)
FROM foo
GROUP BY a;

它工作正常。我想更改该查询,使其仅匹配总和大于 9 的组。我的(失败)尝试是:

SELECT a,
       SUM(b)
FROM foo
WHERE SUM(b) >9
GROUP BY a;

在 postgres 中正确的做法是什么?

【问题讨论】:

  • 如果您想知道,我否决了这个问题。为了证明这个问题被问了很多,我在谷歌中粘贴了问题的确切标题。前两个结果与 StackOverflow 上的这个问题完全相同。因此,我认为这个问题虽然连贯且格式良好,但并没有显示出太多的研究工作。
  • 公平点。否决票已接受。

标签: sql postgresql select aggregate-functions


【解决方案1】:

您不能在 where 子句中使用聚合表达式 - 这就是 having 子句的用途:

SELECT   a, SUM(b)
FROM     foo
GROUP BY a
HAVING   SUM(b) > 9

【讨论】:

    【解决方案2】:

    尝试使用“have”子句!

    SELECT a,
       SUM(b) FROM foo
    GROUP BY a having sum(b) > 9;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      相关资源
      最近更新 更多