代码之家  ›  专栏  ›  技术社区  ›  John

如何选择其值超过给定总和的所有行?

  •  0
  • John  · 技术社区  · 8 年前

    假设我有一张桌子

    name | val
    ------------
    a    |10
    b    |10
    c    |20
    d    |30
    

    我还有一个用户输入 25 . 如何选择所有行,以便 val 超过一排了吗 25 . 因此,对于25的用户输入,我将返回前三行,其中的值为 40 . 我要做的等效代码是

    total = 0
    user_input = 25
    while total < user_input and rows_by_val_asc_iterator.has_next():
        row = rows_by_val_asc_iterator.next()
        total = total + row.val
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   cHao    8 年前

    您可以使用一种称为“窗口函数”的东西来实现这一点。基本上,它让你有一个运行的总数。选择行,直到总和超过所需的总和。

    例如,尝试以下操作:

    select name, val
      from (
        select name, val, (sum(val) over (order by val, name)) as total
        from vals
      ) as t
      where total - val < 25