50 Publicações Com Maior Número de TabCoins ⭐️
Turma, estou no desafio de fazer uma publicação por dia no TabNews, e para hoje fiz uma query no banco de dados para listar as publicações com o maior número de TabCoins na história do site.
Fiz isso tanto para repescar conteúdos interessantes, quanto para entender se mais para frente ficaria legal uma nova Aba que mostrasse os "Melhores" conteúdos, seja isso os melhores na história do site, ou do mês, semana, etc.
E após esta lista eu coloquei a query que utilizei para montar ela, pois tem um detalhe de concatenação para já formar o link em Markdown e que possa ser interessante conhecer.
Fora isso, coloquei também o EXPLAIN ANALYZE
detalhando a performance de executar ela e o custo total, que achei que seria muito maior do que foi, considerando que ainda não passamos pela issue de criação de índices da Milestone atual.
PS: Independente de quando a publicação foi feita, procure deixar algum comentário nela adicionando, destacando ou reforçando algo de positivo. Garanto para você que o autor da publicação irá receber de braços abertos e poderá mudar o dia/semana dela 🤝
50 Publicações Com Maior Número de TabCoins
Query
select
get_current_balance('content:tabcoin', contents.id) as tabcoins,
'[' || title || '](https://www.tabnews.com.br/' || users.username || '/' || contents.slug || ')' as publicação,
users.username as usuário
from
contents
join
users on contents.owner_id = users.id
where
contents.status = 'published'
and parent_id is null
order by
tabcoins desc
limit 50;
Query (EXPLAIN ANALYZE)
Limit (cost=8191.71..8191.83 rows=50 width=46) (actual time=183.755..183.767 rows=50 loops=1)
-> Sort (cost=8191.71..8212.77 rows=8425 width=46) (actual time=183.754..183.762 rows=50 loops=1)
Sort Key: (get_current_balance('content:tabcoin'::text, contents.id)) DESC
Sort Method: top-N heapsort Memory: 46kB
-> Hash Join (cost=1906.67..7911.83 rows=8425 width=46) (actual time=11.697..181.461 rows=7871 loops=1)
Hash Cond: (contents.owner_id = users.id)
-> Seq Scan on contents (cost=0.00..3750.43 rows=8425 width=126) (actual time=0.013..21.054 rows=7871 loops=1)
Filter: ((parent_id IS NULL) AND ((status)::text = 'published'::text))
Rows Removed by Filter: 39173
-> Hash (cost=1544.63..1544.63 rows=28963 width=26) (actual time=11.486..11.487 rows=28336 loops=1)
Buckets: 32768 Batches: 1 Memory Usage: 1882kB
-> Seq Scan on users (cost=0.00..1544.63 rows=28963 width=26) (actual time=0.005..5.959 rows=28336 loops=1)
Planning Time: 0.227 ms
Execution Time: 184.061 ms