在SQL中查找两个嵌套聚合函数的最大值

时间:2012-10-30 08:56:36

标签: sql ms-access

我有一个MS Access 2007数据库,其中包含以下表和属性:

  • 人物:姓名
  • 行星:名称
  • TimeTable:Planet的名字,角色名称

时间表表示角色是否访问过一颗行星,一个行星可能有多个条目 我试图得到的问题是这一个:
对于每部电影,哪些角色访问过最多的行星?

这是我的尝试:

SELECT T.Movie, T.[Character's Name], Count(T.[Planet's Name]) AS planets
FROM TimeTable T
GROUP BY T.Movie, T.[Character's Name]
HAVING Count(T.[Planet's Name]) >= ALL (SELECT Count(T2.[Planet's Name])
FROM TimeTable T2 WHERE T.Movie = T2.Movie);

虽然它给了我一个空洞的结果。我的查询出了什么问题?

1 个答案:

答案 0 :(得分:0)

您要求的行大于或等于所有行。下面的查询将返回匹配,即返回具有相同最高值的所有行。

SELECT t.movie,
       t.character,
       Count(t.planet) AS CountOfPlanet
FROM   timetable t
GROUP  BY t.movie, t.character
HAVING Count(t.planet) = (
   SELECT Max(countofplanet)
   FROM   (
   SELECT movie,
          [character],
          Count(planet) AS CountOfPlanet
          FROM   timetable
          GROUP  BY movie, [character]) q
   WHERE  q.movie = t.movie) 

恐怕我无法应对你的字段名称。我可能忽略了这些空间,但撇号的距离太远了。