所以我有这个看起来像这样的表:
user_id location duration(s)
------- -------- -----------
1 room1 75
2 room1 289
1 room2 630
1 room1 287
上表显示了用户在房间中的时长,行数表示用户在特定房间内的次数。因此,例如在上面的数据中,有2行,其中用户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_1_freq和room_2_freq是用户进入相应房间的次数,room_1_duration和room_2_duration是用户在每个房间消费的平均时间。这可以在一个查询中完成吗?
答案 0 :(得分:1)
如果我理解正确,这只是条件聚合:
class Polygon:
def __init__(self, num_of_sides):
self.n= num_of_sides
self.num_of_sides= int(input('Enter the number of sides: '))
self.sides = []
def sideLength(self):
"""This method appends all sides of the polygon into a list"""
for i in range(self.n):
side = int(input('Enter the length the side: ' + str(i+1) + ' : '))
self.sides.append(side)
print self.sides
class Triangle(Polygon):
def __init__(self):
Polygon.__init__(self,3)
def findPeri(self):
print 'The total area of your perimeter is: ',sum(self.sides)
答案 1 :(得分:1)
回答您的问题有一种更简单(也可能更灵活的方式)。您的辅助(结果)表将按照每个房间和每个需要报告的用户的列数呈指数级扩展,并且在我看来会变得难以管理。另外,使用Gordon的解决方案,每次添加用户或房间时都必须重写查询。
如果使用标准的sum,count和average函数在SQL中使用标准分组子句汇总数据,那么维护起来要容易得多:
SELECT user_id, location, count(location), sum(duration), avg(duration)
FROM visits
group by user_id, location
这会为您提供所需的结果,但格式略有不同:
这样做,您可以添加许多您想要的房间和用户,并且摘要信息将始终有效。添加日期或时间列以过滤结果也非常容易。