You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.4 KiB
38 lines
1.4 KiB
SELECT |
|
account_id, |
|
sum(rank) AS rank, |
|
array_agg(reason) AS reason |
|
FROM ( |
|
SELECT |
|
accounts.id AS account_id, |
|
count(follows.id) / (1.0 + count(follows.id)) AS rank, |
|
'most_followed' AS reason |
|
FROM follows |
|
INNER JOIN accounts ON accounts.id = follows.target_account_id |
|
INNER JOIN users ON users.account_id = follows.account_id |
|
WHERE users.current_sign_in_at >= (now() - interval '30 days') |
|
AND accounts.suspended_at IS NULL |
|
AND accounts.moved_to_account_id IS NULL |
|
AND accounts.silenced_at IS NULL |
|
AND accounts.locked = 'f' |
|
AND accounts.discoverable = 't' |
|
GROUP BY accounts.id |
|
HAVING count(follows.id) >= 5 |
|
UNION ALL |
|
SELECT accounts.id AS account_id, |
|
sum(status_stats.reblogs_count + status_stats.favourites_count) / (1.0 + sum(status_stats.reblogs_count + status_stats.favourites_count)) AS rank, |
|
'most_interactions' AS reason |
|
FROM status_stats |
|
INNER JOIN statuses ON statuses.id = status_stats.status_id |
|
INNER JOIN accounts ON accounts.id = statuses.account_id |
|
WHERE statuses.id >= ((date_part('epoch', now() - interval '30 days') * 1000)::bigint << 16) |
|
AND accounts.suspended_at IS NULL |
|
AND accounts.moved_to_account_id IS NULL |
|
AND accounts.silenced_at IS NULL |
|
AND accounts.locked = 'f' |
|
AND accounts.discoverable = 't' |
|
GROUP BY accounts.id |
|
HAVING sum(status_stats.reblogs_count + status_stats.favourites_count) >= 5 |
|
) t0 |
|
GROUP BY account_id |
|
ORDER BY rank DESC
|
|
|