我有一张这样的table:
user_id location duration(s)
------- -------- -----------
1 room1 75
2 room1 289
1 room2 630
1 room1 287
上表显示了用户在一个房间里呆了多长时间,行数表示用户在一个特定房间里呆了多少次。例如,在上面的数据中,有两行用户1在位置room1中,这意味着他已经在room1中两次了。如何将这些数据转换成下表:
user_id room_1_freq room_1_duration room_2_freq room_2_duration
------- ----------- --------------- ----------- ---------------
1 2 181 1 630
2 1 289 0 0
其中room\ u 1\ u freq和room\ u 2\ u freq是用户在各个房间的次数,room\ u 1\ u duration和room\ u 2\ u duration是用户在每个房间花费的平均时间。这可以在单个查询中完成吗?
2条答案
按热度按时间m2xkgtsf1#
回答你的问题有一种更简单(而且可能更灵活)的方法。您的第二个(结果)表将随着每个房间和每个需要报告的用户的列数呈指数级扩展,在我看来,这将变得难以管理。另外,使用gordon的解决方案,每次添加用户或文件室时,都必须重写查询。
如果在sql中使用标准的sum、count和average函数以及标准的grouping子句对数据进行汇总,那么维护起来就容易多了:
这将为您提供所需的结果,但格式略有不同:
通过这种方式,您可以添加任意多个房间和用户,并且摘要信息将始终有效。添加日期或时间列来过滤结果也很容易。
zujrkrfu2#
如果我理解正确,这只是条件聚合: