栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

由于存在不相关的字段而导致交叉表拆分结果

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

由于存在不相关的字段而导致交叉表拆分结果

两个问题。

1.
ORDER BY
是必需的。

手册:

在实践中,SQL查询应始终指定

ORDER BY 1,2
以确保输入行的顺序正确,即,具有相同值的值
row_name
在该行内被放在一起并正确地排序。

对于的单参数形式

crosstab()
ORDER BY 1,2
将是必需的。

2. 列,每组具有不同的值。

手册:

crosstab(text source_sql, text category_sql)

source_sql
是产生数据源集的SQL语句。

此语句必须返回
row_name
列,一
category
列和一
value
列。它还可能有一个或多个“额外”列。该
row_name
列必须是第一列。在
category
value
列必须是最后两列的顺序。
row_name

与之间的任何列
category
均被视为“额外”。对于具有相同
row_name
值的所有行,“额外”列应相同。


大胆强调我的。 栏。似乎您想在 列上形成组,但并没有按您希望的那样工作。

解决方案取决于您实际想要实现的目标。这不是您的问题,您默默地假定该功能将实现您希望的功能。

解决方案

我想您想在两个主要专栏上进行分组:

(dt, instrument)
。您可以使用串联或数组来玩技巧,但这会很慢和/或不可靠。我建议使用窗口函数
rank()

dense_rank()

更干净,更快速的方法,或者为 每个所需的组 生成一个 单列唯一值 。这 非常
便宜,因为排序行是主要成本,并且框架的顺序无论如何都与所需顺序相同。如果需要,可以在外部查询中删除添加的列:

SELECt dt, instrument, vol, oiFROM   crosstab(   $$SELECt dense_rank() OVER (ORDER BY dt, instrument) AS rnk          , dt, instrument, field, value      FROM   marketdata.instrument_data      WHERe  field IN ('PX_VOLUME', 'OPEN_INT')     ORDER  BY 1$$ , $$VALUES ('PX_VOLUME'),('OPEN_INT')$$   ) vol(rnk int, dt date, instrument text, vol numeric, oi numeric);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/441576.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号