【问题标题】:SQL: How to group rows with the condition that sum of fields is limited to a certain value?SQL:如何在字段总和限制为某个值的条件下对行进行分组?
【发布时间】:2018-09-30 09:56:31
【问题描述】:

这是我的桌子:

id  user_id  date          balance
1   1        2016-05-10    10
2   1        2016-05-10    30
3   2        2017-04-24    5
4   2        2017-04-27    10
5   3        2017-11-10    40

我想按 user_id 对行进行分组并对 balance 求和,但总和等于或小于 30。此外,我需要显示最小值组中的日期。它应该是这样的:

id      balance date_start
1-1      10     2016-05-10
1-2      30     2016-05-10
2-1      15     2017-04-24

请原谅我的语言。谢谢。

【问题讨论】:

  • 请您使用的 dbms 名称
  • 您好 Nikolay,如果分组总和
  • 我正在使用 Redshift 数据库。
  • 这是SQL中很难做到的问题。我熟悉的解决方案使用递归 CTE 或分层查询构造——RedShift 中都没有。

标签: sql group-by sum


【解决方案1】:

您应该能够通过使用 group by & having 来做到这一点,这里有一个可以解决您的情况的示例:

SELECT id, user_id, SUM(balance) as balance, data_start
FROM your_table
GROUP BY user_id
HAVING SUM(balance) >= 30
AND MIN(date_start)

这是使用一个查询完成的好方法,但它是一个复杂的查询,如果在非常大的表上使用它时应该小心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    相关资源
    最近更新 更多