Nice explanation 👍 with cte as (select *,month(submit_date) as mnth from reviews) select mnth,restaurant_id,round(avg(rating),1) as rating from cte group by 1,2 having count(*) >=2;
solved using dense_rank function, similar way with cte_1 as ( select month(submit_date) as mnth, restaurant_id, cast(rating as float) rating, review_id,dense_rank() over(partition by restaurant_id order by review_id) as cnt from reviews ) select mnth,restaurant_id,avg(rating) as avg_rating from cte_1 group by mnth,restaurant_id having count(cnt)>=2 order by restaurant_id
My approach in MySql : with cte as (select *,month(submit_date) as monthh,count(rating) over(partition by month(submit_date),restaurant_id) as count_rating from reviews) select monthh,restaurant_id, round((sum(rating))/(count(rating)),1) as average_rating from cte where count_rating>=2 group by 1,2 order by restaurant_id,monthh;
select month(submit_date) as month, restaurant_id, format(avg(rating*1.0),'0.0') as avg_rating from reviews group by month(submit_date), restaurant_id having count(review_id) >=2
select restaurant_id, mnt, round(avg(rating),1) avgs from (select *, extract(month from submit_date) mnt from reviews) x group by 1,2 having count(rating) >= 2 order by 2,1
;with CTE AS ( select Datepart(Year,Submit_date) as SubmitYear, Datepart(MONTH,Submit_date) as SubmitMonth ,Restaurant_Id , Cast(Rating as decimal) as Rating from Reviews ) select SubmitMonth,Restaurant_Id,Avg(rating) as Raing --,count(rating) as cnt from CTE group by SubmitMonth,Restaurant_Id having count(rating)>1
SELECT DATE_FORMAT(submit_date,"%M-%Y") as months, restaurant_id, AVG(rating) as avg_rating FROM reviews GROUP BY DATE_FORMAT(submit_date,"%M-%Y"),restaurant_id HAVING count(review_id)>=2 ORDER BY restaurant_id,Month(submit_date);
with cte as( select MONTH(submit_date) as m1,restaurant_id FROM reviews GROUP BY MONTH(submit_date),restaurant_id HAVING COUNT(review_id)>=2 ),cte1 as( select reviews.* FROM cte JOIN reviews ON cte.m1=MONTH(reviews.submit_date) and cte.restaurant_id=reviews. restaurant_id ) select MONTH(submit_date),restaurant_id,round(AVG(rating),1) as avg_review FROM cte1 GROUP BY MONTH(submit_date),restaurant_id;
Your way of explaining is very beautiful and real. People are getting a lot of benefit. Keep going ahead and best wishes.
Nice explanation 👍
with cte as (select *,month(submit_date) as mnth from reviews)
select mnth,restaurant_id,round(avg(rating),1) as rating from cte group by 1,2 having count(*) >=2;
Thank you for sharing questions.🙏👍
solved using dense_rank function, similar way
with cte_1 as
(
select month(submit_date) as mnth, restaurant_id, cast(rating as float) rating, review_id,dense_rank() over(partition by restaurant_id order by review_id) as cnt from reviews
)
select mnth,restaurant_id,avg(rating) as avg_rating from cte_1 group by mnth,restaurant_id having count(cnt)>=2 order by restaurant_id
My approach in MySql :
with cte as (select *,month(submit_date) as monthh,count(rating) over(partition by month(submit_date),restaurant_id) as count_rating
from reviews)
select monthh,restaurant_id,
round((sum(rating))/(count(rating)),1) as average_rating
from cte
where count_rating>=2
group by 1,2
order by restaurant_id,monthh;
select month(submit_date) as month, restaurant_id, format(avg(rating*1.0),'0.0') as avg_rating
from reviews
group by month(submit_date), restaurant_id
having count(review_id) >=2
select restaurant_id, mnt, round(avg(rating),1) avgs
from
(select *, extract(month from submit_date) mnt
from reviews) x
group by 1,2
having count(rating) >= 2
order by 2,1
;with CTE
AS
(
select Datepart(Year,Submit_date) as SubmitYear,
Datepart(MONTH,Submit_date) as SubmitMonth
,Restaurant_Id ,
Cast(Rating as decimal) as Rating
from Reviews
)
select SubmitMonth,Restaurant_Id,Avg(rating) as Raing
--,count(rating) as cnt
from CTE
group by SubmitMonth,Restaurant_Id
having count(rating)>1
SELECT DATE_FORMAT(submit_date,"%M-%Y") as months,
restaurant_id,
AVG(rating) as avg_rating
FROM reviews
GROUP BY DATE_FORMAT(submit_date,"%M-%Y"),restaurant_id
HAVING count(review_id)>=2
ORDER BY restaurant_id,Month(submit_date);
with cte as(
select MONTH(submit_date) as m1,restaurant_id FROM reviews GROUP BY MONTH(submit_date),restaurant_id
HAVING COUNT(review_id)>=2
),cte1 as(
select reviews.* FROM cte JOIN reviews ON cte.m1=MONTH(reviews.submit_date) and cte.restaurant_id=reviews.
restaurant_id
)
select MONTH(submit_date),restaurant_id,round(AVG(rating),1) as avg_review FROM cte1 GROUP BY MONTH(submit_date),restaurant_id;