SQL:添加行值并显示在新列中
Posted
技术标签:
【中文标题】SQL:添加行值并显示在新列中【英文标题】:SQL: Add the row values and display in new column 【发布时间】:2015-05-16 13:45:41 【问题描述】:我有按tasteRating订购的表t1
Fruit | tasteRating|Cost
-----------------------
Apple | 99 | 1
Banana| 87 | 2
Cherry| 63 | 5
我想要t2
Fruit | Cost | Total Cost
-------------------------
Apple | 1 | 1
Banana| 2 | 3
Cherry| 5 | 8
有没有办法根据 Cost 的值在 SQL 中动态生成 Total Cost? 在 Redshift 上执行此操作。 谢谢
【问题讨论】:
不,您提供的数据无法使用。 SQL 表表示无序集。要指定排序,您需要一个额外的列,因为数据显然不是按第一列排序的。你还有另一列有排序吗? 添加了更多细节 。 .您尚未指定排序的列。 【参考方案1】:这样的运行总和可以很容易地在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 对窗口函数有奇怪的限制。出于某种原因,它需要rows between
语法:
sum(col_1) over (order by taste_rating desc
rows between unbounded preceding and current row
) as col_2
我不知道为什么它有这个要求。 ANSI 不需要它(尽管它受支持),它在 Postgres(Redshift 的基础数据库)中也没有限制。
【讨论】:
已添加数据库,Redshift支持窗口函数。 得到这个 - 错误:使用 ORDER BY 子句的聚合窗口函数需要一个框架子句 此处的文档:docs.aws.amazon.com/redshift/latest/dg/…。我得到的总数是相反的,知道为什么吗? 已解决,我错过了 order by 中的 desc。谢谢。以上是关于SQL:添加行值并显示在新列中的主要内容,如果未能解决你的问题,请参考以下文章
Pandas str.contains - 在字符串中搜索多个值并在新列中打印值[重复]