Question
I have the following table in my database:
╔════════╦═════════════╦═══════════════╗
║ Name ║ total_stars ║ total_reviews ║
╠════════╬═════════════╬═══════════════╣
║ Item A ║ 27 ║ 7 ║
║ Item B ║ 36 ║ 9 ║
║ Item C ║ 27 ║ 7 ║
║ Item D ║ 30 ║ 6 ║
║ Item E ║ 0 ║ 0 ║
║ Item F ║ 0 ║ 0 ║
║ Item F ║ 15 ║ 3 ║
╚════════╩═════════════╩═══════════════╝
I was looking at this article and trying to implement Bayesian rankings in PostgreSQL database.
The formula given for the rank is
br = ( (avg_num_votes * avg_rating) + (this_num_votes * this_rating) ) /
(avg_num_votes + this_num_votes)
where:
- avg_num_votes: The average number of votes of all items that have num_votes>0
- avg_rating: The average rating of each item (again, of those that have num_votes>0)
- this_num_votes: number of votes for this item
- this_rating: the rating of this item
This is the query I came up with, but it is not working:
with avg_num_votes as (
select AVG(total_reviews)
from business
where total_reviews != 0),
avg_rating as (
select AVG(total_stars/total_reviews)
from business
where total_reviews != 0)
select * from business
order by ((avg_num_votes * avg_rating) + (total_stars)) / (avg_num_votes + total_reviews);
I am getting:
ERROR: column "avg_num_votes" does not exist
No correct solution
Licensed under: CC-BY-SA with attribution
Not affiliated with dba.stackexchange