【问题标题】:Using Avg and Group by [closed]使用 Avg 和 Group by [关闭]
【发布时间】:2012-11-11 23:51:00
【问题描述】:

我正在编写一个查询,该查询需要根据每种类型计算电影的平均成本。 我正在使用 MySQL 编写此查询。 到目前为止,我有`

SELECT 
    MOVIE_NUM,
    MOVIE_GENRE,    
    ROUND(AVG(MOVIE_COST), 2) AS 'AVERAGE COST',
    MOVIE_COST
FROM
    MOVIE
GROUP BY MOVIE_GENRE 
ORDER BY MOVIE_NUM

这给了我以下输出:

MOVIE_NUM  MOVIE_GENRE  AVERAGE COST  MOVIE_COST
1234       FAMILY       39.95         39.95
1235       ACTION       52.72         59.95
1236       DRAMA        58.46         59.95
1237       COMEDY       44.12         29.95

但是我需要这种格式:

MOVIE_NUM  MOVIE_GENRE  AVERAGE COST  MOVIE_COST
1234       FAMILY       39.95         39.95
1235       ACTION       52.72         59.95
1236       DRAMA        58.46         59.95
1237       COMEDY       44.12         29.95
1238       DRAMA        58.46         89.95
1239       DRAMA        58.46         25.49
1245       ACTION       52.72         45.49
1246       COMEDY       44.12         58.29

感谢您的帮助。提前谢谢你。

【问题讨论】:

  • 先生让我困惑的是为什么他的 GROUP BY 子句过滤了结果?!
  • @vladr mysql 不支持OVER
  • 但是你需要这种格式吗???考虑到我们不是读心者,你到底在要求什么?你的第二个结果有多种类型,但基于什么标准???阅读您的问题并假装您是我们……现在尝试回答问题。投票结束,因为您没有花足够的时间提出有效的问题。

标签: mysql sql group-by average


【解决方案1】:

您无法从要分组的同一查询中获取所有记录。计算一个查询中的平均值并与表连接:

selecct
  m.MOVIE_NUM,
  m.MOVIE_GENRE,
  a.AVGCOST AS 'AVERAGE COST',
  m.MOVIE_COST
from
  MOVIE as m
  inner join (
    select MOVIE_GENRE, round(avg(MOVIE_COST)) as AVGCOST
    from MOVIE
    group by MOVIE_GENRE
  ) as a on a.MOVIE_GENRE = m.MOVIE_GENRE
order by MOVIE_NUM

【讨论】:

    【解决方案2】:

    在 mysql 中可能有更短的方法来执行此操作,因为它有一些巧妙的分组技巧,但这应该可以:

    Select
      m.Movie_Num,
      m.Movie_Genre,    
      gc.Average_Cost,
      m.Movie_Cost
    From
      Movie m
        Inner Join (
          Select
            Movie_Genre,
            Round(Avg(Movie_Cost), 2) AS 'Average_Cost'
          From
            Movie
          Group By
            Movie_Genre
          ) as gc
         On m.Movie_Genre = gc.Movie_Genre
    Order By 
      m.Movie_Num
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-18
      • 2012-05-28
      • 2019-05-05
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多