date
influencer_id | date | followers
1 | 2020-05-29 | 7361
1 | 2020-05-28 | 7234
...
2 | 2020-05-29 | 82
2 | 2020-05-28 | 85
...
3 | 2020-05-29 | 3434
3 | 2020-05-28 | 2988
3 | 2020-05-27 | 2765
...
比如说我想计算一下每个影响者在过去7天里获得了多少粉丝 然后得到以下表格。
influencer_id | growth
1 | <num followers last day - num followers first day>
2 | "
3 | "
作为第一次尝试,我这样做了。
SELECT influencer_id,
(MAX(followers) - MIN(followers)) AS growth
FROM influencer_follower_daily
WHERE date < '2020-05-30'
AND date >= '2020-05-23'
GROUP BY influencer_id;
这个方法可行,可以显示每个影响者一周内的增长情况。但是,它假设粉丝数总是增加,人们永远不会取消关注!
那么有没有一种方法可以在原始表上使用SQL查询来实现我想要的东西呢?或者说我必须要用一个新的表来生成一个全新的表。FOR
循环计算每个日期之间的+-关注者变化列?
优化GROUP BY查询以获取每个用户的最新记录first()
如果适用,我建议你开始一个新的问题,披露确切的表定义和基数......。last()
密切相关。
array_agg()
PostgreSQL:通过子句连接组内的数组。使用类似于TOP与GROUP BYarray_agg()
从分组列中取样重复值的最佳性能。ORDER BY
Postgres没有一个
SELECT influencer_id, arr[array_upper(arr, 1)] - arr[1]
FROM (
SELECT influencer_id, array_agg(followers) AS arr
FROM (
SELECT influencer_id, followers
FROM influencer_follower_daily
WHERE date >= '2020-05-23'
AND date < '2020-05-30'
ORDER BY influencer_id, date
) sub1
GROUP BY influencer_id
) sub2;
聚合函数。 一种方法是。另一种方法是使用数组。 sub1