具有多列和星期日的PostgreSQL交叉表查询
我试图通过将几个列分组来创建一个透视:用户id、名称、周数和当天的名称。 当前请求未给出所需的结果。 我需要帮助 这是我的桌子: 这是我当前的请求: 以下是我想要得到的结果。具有多列和星期日的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')
您可以只使用条件聚合:
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版本是否有等效的过滤器?第二种解决方案也适用。谢谢你的支持。