SQL:添加行值并显示在新列中

时间:2015-05-16 13:45:42

标签: sql amazon-redshift

我有通过tasteRating排序的表t1

<!DOCTYPE html>
<html ng-app="App">

<head>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
  <meta charset="utf-8">
  <title></title>
</head>

<body ng-controller="Controller">

  <select ng-model="model" ng-options="item as item.Text for item in list" ng-change="GetVal(model.Value)">

  </select>


  <pre>
 my model: {{model}}
  </pre>
</body>

</html>

我想要t2

    Fruit | tasteRating|Cost 
    -----------------------
    Apple |  99       | 1  
    Banana|  87       | 2  
    Cherry|  63       | 5 

有没有办法根据Cost的值在SQL中动态生成总成本? 在Redshift上执行此操作。 感谢

1 个答案:

答案 0 :(得分:7)

这样的运行总和可以使用窗口函数在modern DBMS中轻松完成:

select col_1,
       sum(col_1) over (order by taste_rating desc) as col_2
from the_table;

但请注意,没有order by的运行总和没有意义。因此,您必须包含一个定义行顺序的列。

SQLFiddle:http://sqlfiddle.com/#!15/166b9/1

编辑:(戈登)

RedShift对Window函数有一些奇怪的限制。出于某种原因,它需要rows between语法:

sum(col_1) over (order by taste_rating desc
                 rows between unbounded preceding and current row
                ) as col_2

我不知道为什么会有这个要求。 ANSI不要求它(尽管它是受支​​持的),并且它不是Postgres(Redshift的基础数据库)中的限制。