我有这个SQL架构:http://sqlfiddle.com/#!9/eb34d
特别是这些是这个问题的相关栏目:
ut_id,ob_punti
我需要为每个用户(ut_id)获取“ob_punti”的TOP n(其中n为4)的平均值
此查询返回按ut_id分组的所有ob_punti值的AVG:
SELECT ut_id, SUM(ob_punti), AVG(ob_punti) as coefficiente
FROM vw_obiettivi_2015
GROUP BY ut_id ORDER BY ob_punti DESC
但我无法弄清楚如何只获得前4个值的AVG。
你能帮忙吗?
答案 0 :(得分:1)
它将给出前4的SUM和AVG。您可以用n替换4来获得前n
。
select ut_id,SUM(ob_punti), AVG(ob_punti) from (
select @rank:=if(@prev_cat=ut_id,@rank+1,1) as rank,ut_id,ob_punti,@prev_cat:=ut_id
from Table1,(select @rank:=0, @prev_cat:="")t
order by ut_id, ob_punti desc
) temp
where temp.rank<=4
group by ut_id;
答案 1 :(得分:0)
这与所问的问题并不完全相关,我提出这个问题是因为有人可能会从中受益。
我遇到了hackerearth问题,编写mysql查询以根据可用库存产品的平均数量获取前10条记录。
SELECT productName, avg(quantityInStock) from products
group by quantityInStock
order by quantityInStock desc
limit 10
注:如果有人可以更好地完成上述查询,欢迎修改。