【问题标题】:Average value for top n records?前 n 条记录的平均值?
【发布时间】:2015-09-06 09:25:10
【问题描述】:

我有这个 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。

你能帮忙吗?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    它将给出前 4 的 SUM 和 AVG。您可以将 4 替换为 n 以获得 top 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;
    

    【讨论】:

    • 首先感谢您的回答!我得到一个单行结果(在生产环境中),而我需要每个 ut_id 的 AVG 和 SUM(大约 100)。再次感谢
    • @eldblz :如果答案解决了您的查询,那么您应该接受它作为答案。
    • 抱歉,但没有解决请求,我需要每个 ut_id 的前 4 个 ob_punti 的 AVG 您的查询只返回一行!
    • @eldblz :此查询中没有应用过滤器。它将分别计算每个ut_id 的排名。请在 sqlfiddle 创建一些数据以进行检查。请保留相关字段,删除不必要的字段。
    • @eldblz:请检查并告诉我。查询中缺少其工作的 sqlfiddle.com/#!9/d3513/3 group by 子句。对于给您带来的不便,我深表歉意。
    【解决方案2】:

    这与所问的问题并不完全相关,我之所以提出这个问题是因为有人可能会从中受益。

    我遇到了hackerearth 问题,编写mysql 查询以根据可用产品的平均库存数量获取前10 条记录。

    SELECT productName, avg(quantityInStock) from products 
    group by quantityInStock 
    order by quantityInStock desc
    limit 10
    

    注:以上查询如果有人能改进,欢迎修改。

    【讨论】:

      猜你喜欢
      • 2021-11-01
      • 2013-06-01
      • 2018-05-12
      • 2015-02-04
      • 2014-09-17
      • 1970-01-01
      • 2019-03-24
      • 2021-11-20
      • 1970-01-01
      相关资源
      最近更新 更多