【问题标题】:PostgreSQL crosstab query with multiple columns and week day具有多列和工作日的 PostgreSQL 交叉表查询
【发布时间】:2018-09-26 18:53:31
【问题描述】:

我正在尝试通过对几列进行分组来创建一个数据透视表:用户 ID、姓名、周数和当天的名称。 当前请求没有给出期望的结果。 我需要帮助。

这是我的桌子:

user_id name    week_number day_name    price
2       Luc     8           Sunday      10
2       Luc     8           Monday      15
2       Luc     8           Tuesday     8
2       Luc     8           Wednesday   2
2       Luc     8           Thursday    9
2       Luc     8           Friday      9
2       Luc     8           Saturday    11
2       Luc     9           Saturday    1
2       Luc     9           Friday      13
3       Mathieu 8           Sunday      22
3       Mathieu 8           Monday      13
3       Mathieu 8           Tuesday     9
3       Mathieu 8           Wednesday   3

这是我目前的要求:

SELECT *
FROM   crosstab(
'SELECT user_id, name, week_number,day_name,price
FROM   table_1
ORDER  BY 1,2,3,4' 
) AS ct (
"user_id" integer,
"day_name" text,
"Sunday" integer,   
"Monday" integer,   
"Tuesday" integer,  
"Wednesday" integer,    
"Thursday" integer, 
"Friday" integer,   
"Saturday" integer
);

这是我想要得到的结果。

【问题讨论】:

    标签: postgresql pivot grouping pivot-table crosstab


    【解决方案1】:

    你可以只使用条件聚合:

    SELECT user_id, name, week_number
           MAX(price) FILTER (WHERE day_name = 'Sunday') as Sunday,
           MAX(price) FILTER (WHERE day_name = 'Monday') as Monday,
           MAX(price) FILTER (WHERE day_name = 'Tuesday') as Tuesday,
           MAX(price) FILTER (WHERE day_name = 'Wednesday') as Wednesday,
           MAX(price) FILTER (WHERE day_name = 'Thursday') as Thursday,
           MAX(price) FILTER (WHERE day_name = 'Friday') as Friday,
           MAX(price) FILTER (WHERE day_name = 'Saturday') as Saturday
    FROM table_1
    GROUP BY user_id, name, week_number
    ORDER BY user_id, name, week_number;
    

    编辑:

    不用FILTER也可以写同样的逻辑:

           MAX(CASE WHEN day_name = 'Sunday' THEN price END) as Sunday,
    

    【讨论】:

    • 感谢它适用于 PostgreSQL 9.4.4 版本。 PostgreSQL 9.3.22 版本是否有等效过滤器?
    • 第二种解决方案也有效。感谢您的支持。
    猜你喜欢
    • 2017-09-04
    • 2015-12-28
    • 1970-01-01
    • 2011-03-01
    相关资源
    最近更新 更多