【问题标题】:SQL GroupBy with Where clauseSQL Group By with Where 子句
【发布时间】:2025-12-30 01:35:11
【问题描述】:

以下查询返回任何存在 Where transaction_date > '3/1/2017' 并且所有日期的 sum(AMOUNT) > 3000 的用户。

我只想返回 sum(AMOUNT) > 3000 AFTER 3/1/2017 的用户。换句话说,用户需要从 2017 年 3 月 1 日之后的交易中获得至少 3000 美元的总和(金额)。

 SELECT   User
 FROM     Source
 Where transaction_date > '3/1/2017'
 GROUP BY User
 HAVING   sum(AMOUNT) > 3000

【问题讨论】:

  • 不,您的查询执行您打算执行的操作,而不是您描述的执行操作。
  • 当我查看所有具有上述查询的用户的 sum(amount) 时,我看到的用户有
  • 。 .您应该提供样本数据和所需的结果。

标签: sql postgresql


【解决方案1】:

WHERE 在聚合之前处理。因此,您的查询仅考虑该日期之后的交易。

我强烈建议您使用 ISO 标准日期格式并将查询编写为:

SELECT User
FROM Source
WHERE transaction_date > '2017-03-01'
GROUP BY User
HAVING SUM(AMOUNT) > 3000;

如果您对结果有疑问,可能是由于日期格式。

【讨论】:

    【解决方案2】:

    使用 to_date 函数格式化日期和 => 至少您需要的金额。

    SELECT   User
    FROM     Source
    Where transaction_date > to_date( '3/1/2017','dd/mm/rrrr')
    GROUP BY User
    HAVING   sum(AMOUNT) => 3000
    

    【讨论】:

      【解决方案3】:

      如果要包含 3000,请在 Gordon 的代码中使用 >=

      SUM(AMOUNT) >= 3000
      

      【讨论】:

        【解决方案4】:

        试试这个:

        选择用户 来源 WHERE 日期(交易日期)> '2017-03-01' 按用户分组 总和(金额)> 3000;

        如果问题仍然存在,请在表格中分享您的数据格式。

        【讨论】: