Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多列和星期日的PostgreSQL交叉表查询_Postgresql_Pivot_Grouping_Pivot Table_Crosstab - Fatal编程技术网

具有多列和星期日的PostgreSQL交叉表查询

具有多列和星期日的PostgreSQL交叉表查询,postgresql,pivot,grouping,pivot-table,crosstab,Postgresql,Pivot,Grouping,Pivot Table,Crosstab,我试图通过将几个列分组来创建一个透视:用户id、名称、周数和当天的名称。 当前请求未给出所需的结果。 我需要帮助 这是我的桌子: 这是我当前的请求: 以下是我想要得到的结果。 您可以只使用条件聚合: SELECT user_id, name, week_number MAX(price) FILTER (WHERE day_name = 'Sunday') as Sunday, MAX(price) FILTER (WHERE day_name = 'Monday')

我试图通过将几个列分组来创建一个透视:用户id、名称、周数和当天的名称。 当前请求未给出所需的结果。 我需要帮助

这是我的桌子:

这是我当前的请求:

以下是我想要得到的结果。


您可以只使用条件聚合:

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;
编辑:

您可以编写相同的逻辑而不使用
过滤器

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

您可以只使用条件聚合:

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;
编辑:

您可以编写相同的逻辑而不使用
过滤器

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

谢谢,它适用于PostgreSQL 9.4.4版本。PostgreSQL 9.3.22版本是否有等效的过滤器?第二种解决方案也适用。感谢您的支持。感谢它与PostgreSQL 9.4.4版本配合使用。PostgreSQL 9.3.22版本是否有等效的过滤器?第二种解决方案也适用。谢谢你的支持。