-3

我正在编写一个查询,该查询需要根据每种类型计算电影的平均成本。我正在使用 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

任何帮助表示赞赏。先感谢您。

4

2 回答 2

1

You can't get all records from the same query that you are grouping. Calculate the averages in one query and join against the table:

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
于 2012-11-11T23:57:05.390 回答
1

在 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
于 2012-11-11T23:59:01.477 回答