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

我期望多行时,Postgres中的交叉表函数返回一行输出

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

我期望多行时,Postgres中的交叉表函数返回一行输出

此查询生成所需的输出:

SELECt id, scenario, period, p1, p2, p3, p4  -- all except aux column rnFROM   crosstab(  'SELECt row_number() OVER (ORDER BY id, scenario, period)::int AS rn        , id, scenario, period, period, ct   FROM   m   ORDER  BY 1', 'VALUES (1), (2), (3), (4)'   ) AS (rn int, id int, scenario int, period int, p1 int, p2 int, p3 int, p4 int);

两个特殊的困难:

  1. 您还没有 row_name的 唯一列。我

    row_number()
    用来生成代理密钥:
    rn
    。我从外部将其删除,
    SELECt
    以符合您期望的结果。
    您尝试的方式
    id
    被视为 row_name ,所有输入行都汇总到单个输出行中。

  2. 您需要结果中的其他列(

    scenario
    period
    ),这些列必须在 row_name之后category 之前。您必须列出
    period
    两次 才能另外获得原始列-看起来似乎很多余。

基本:

  • PostgreSQL交叉表查询

与此特定情况有关:

  • 使用Tablefunc在多个列上枢轴

通常,您会有这样的查询:

SELECT id, scenario, p1, p2, p3, p4  -- all except aux column rnFROM   crosstab(  'SELECt rank() OVER (ORDER BY id, scenario)::int AS rn        , id, scenario, period, ct   FROM   m   ORDER  BY 1', 'VALUES (1), (2), (3), (4)'   ) AS (rn int, id int, scenario int, p1 int, p2 int, p3 int, p4 int);

输出如下:

id   scenario   p1   p2   p3   p42    1          1    1    1    12    2          1    1    1    12    3          1    1    1    1

请注意,使用

rank()
而不是
row_number()
将相同的组合组合
(id, scenario)
在一起。
如果计数不是全部,则结果更有意义
1



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

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

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