【问题标题】:MySQL: Is it possible to compute MAX( AVG (field) )?MySQL:是否可以计算 MAX( AVG (field) )?
【发布时间】:2010-04-12 23:31:39
【问题描述】:

我当前的查询是:

SELECT entry_id, user_id, cat_id, AVG( rating ) as avg_rate
FROM `entry_rate`
WHERE 1
GROUP BY entry_id

cat_id 涉及不同的类别:1、2、3 或 4

有没有一种方法可以在每个类别中找到每个用户的最大平均值,而无需设置额外的表格?每个 user_id 的回报可能是 4 最大 avg_rate

例如,请访问以下链接:

http://lh5.ggpht.com/_rvDQuhTddnc/S8Os_77qR9I/AAAAAAAAA2M/IPmzNeYjfCA/s800/table1.jpg

【问题讨论】:

    标签: mysql average


    【解决方案1】:

    可能不是最有效的方法:

    select user_id, cat_id, MAX(avg_rate)
    FROM (
        SELECT entry_id, user_id, cat_id, AVG( rating ) as avg_rate
        FROM entry_rate
        GROUP BY entry_id, user_id, cat_id) t
    GROUP BY user_id, cat_id
    

    【讨论】:

    • 您还需要在内部查询中按 entry_id 和 user_id 进行分组。另外,不需要WHERE 1
    • @BlueRaja,你说得对,我只是复制了他的查询,它也有这些问题。固定。
    • @tloflin 和 @BlueRaja- 天哪!你们是巫师!我已经有一段时间没有运气了(当然我是新手......)。谢谢你!顺便说一句,第 5 行末尾的“t”是什么?这是我不明白的一个元素。
    • “t”是您从中选择的实体的名称。看看你是如何得到那个“from”关键字的,然后是括号中的子查询?好吧,它将子查询视为一个表,所以它需要一个表的名称(例如,如果你要将它与另一个表连接,或者另一个表有一个“user_id”字段并且你需要区分它们)。
    • 所以,如果我理解正确,您将子查询命名为“t”,即使您稍后在查询中没有引用它。 (我看到你可以省略标签为...)
    【解决方案2】:

    你可以这样说。

    SELECT entry_id, user_id, cat_id, AVG( rating ) as avg_rate
    
    FROM 'entry_rate'
    
    GROUP BY entry_id
    
    order by AVG( rating ) DESC
    
    limit 1
    

    这使结果按avg(rating) 排序并选择第一行。并且可以使limit 1,1 选择第二个最大元素

    【讨论】:

      【解决方案3】:
      SELECT s.user_id,s.cat_id,max(s.avg_rate) FROM (
        SELECT entry_id, user_id, cat_id, AVG( rating ) as avg_rate
        FROM entry_rate
        GROUP BY entry_id,user_id,cat_id) as s 
      GROUP BY  s.user_id,s.cat_id
      

      【讨论】:

      • 这也是一个很好的答案!谢谢(但绿色复选标记有点太慢了!)
      【解决方案4】:

      SELECT entry_id, user_id, cat_id, AVG( rating ) as avg_rate 来自entry_rate GROUP BY entry_id 按 avg_rate desc limit 1 排序;

      【讨论】:

      • 欢迎来到 StackOverflow!请使用此link 格式化以使您的答案更具可读性。此外,在您的答案中添加上下文将使未来的读者更了解它。
      猜你喜欢
      • 1970-01-01
      • 2019-03-04
      • 2015-12-03
      • 1970-01-01
      • 2023-03-30
      • 2015-05-17
      • 2019-01-07
      • 1970-01-01
      • 2016-04-24
      相关资源
      最近更新 更多