我有这张桌子
我需要创建一个支点,将情绪显示为列,平均情绪级别按用户 ID、用户日期、情绪分组。例如,对于 user_id = 1、user_date = 2011-07-13 和emotion = 'Anger',平均emotion_level 应为4.0。
我创建了一个支点:
select USER_ID, user_date,
AVG(case emotion when 'Anger' then convert(float, emotion_level) else 0 end) as Anger,
AVG(case emotion when 'Sadness' then convert(float, emotion_level) else 0 end) as Sadness,
AVG(case emotion when 'Interest' then convert(float, emotion_level) else 0 end) as Interest
from emotions group by USER_ID, user_date;
其中一半有效,但计算所有情绪中的平均情绪水平,但不适用于按用户、日期和情绪分组的情绪。
我对第一个用户的结果 + 情绪 = 'Anger' = 2,但应该是 4。
我想,我应该使用窗口函数(over(按 user_id、user_date、emotion 分区)),但无法运行语法。
有可能吗?
我在 prod 中使用 PostgreSQL 9,但上面的示例是用 SQL Server 编写的。