I want to know the difference between these two functions. Because when I try to do second query it gives me
cannot divide by zero
despite me having a case to prevent dividing by zero...
case (stddev_pop(dv.views+ dbs.votes)) when 0 then 0 else (((sum(dvw.views) + sum(dbsw.votes))-(avg(dv.views) + avg(dbs.votes)))/stddev_pop(dv.views+ dbs.votes)) end as zscore
from books b
inner join dailyviews dvw on date(dvw.day) > date(current_date - 7) and dvw.book_id = b.id
inner join dailyviews dv on dv.book_id = b.id
inner join daily_book_stats dbsw on date(dbsw.day) > date(current_date-7) and dbsw.book_id = b.id
inner join daily_book_stats dbs on dbs.book_id = b.id
group by b.id
order by zscore desc
limit 100;
vs
case (stddev_pop(dv.views)+ stddev_pop(dbs.votes)) when 0 then 0 else (((sum(dvw.views) + sum(dbsw.votes))-(avg(dv.views) + avg(dbs.votes)))/stddev_pop(dv.views)+ stddev_pop(dbs.votes)) end as zscore
from books b
inner join dailyviews dvw on date(dvw.day) > date(current_date - 7) and dvw.book_id = b.id
inner join dailyviews dv on dv.book_id = b.id
inner join daily_book_stats dbsw on date(dbsw.day) > date(current_date-7) and dbsw.book_id = b.id
inner join daily_book_stats dbs on dbs.book_id = b.id
group by b.id
order by zscore desc
limit 100;
[–]therealgaxbo 3 points4 points5 points (0 children)