按 COUNT(something) 排序与按#column 排序(sqlzoo 示例)

Order by COUNT(something) vs order by #column (sqlzoo example)

我试图解决 http://sqlzoo.net/wiki/More_JOIN_operations

下的问题 15

我不明白为什么我的查询是错误的,尽管我的输出就像它应该的那样。

这是我的查询:

SELECT movie.title, COUNT(actorid)
FROM movie JOIN casting on movie.id=movieid
WHERE yr='1978'
GROUP BY casting.movieid
ORDER BY COUNT(casting.actorid) DESC

官方回答:

  SELECT title, COUNT(actorid)
  FROM casting,movie                
  WHERE yr=1978
        AND movieid=movie.id
  GROUP BY title
  ORDER BY 2 DESC

如果我只是将查询中的 ORDER BYORDER BY COUNT(casting.actorid) DESC 更改为 ORDER BY 2 DESC,答案就会被接受(正确)。有什么原因吗?

这三个都应该被接受:

SELECT m.title, COUNT(c.actorid) as NumActors
FROM movie m JOIN
     casting c
     on m.id= c.movieid
WHERE yr = '1978'
GROUP BY c.movieid
ORDER BY COUNT(c.actorid) DESC

和:

ORDER BY 2 DESC

和:

ORDER BY NumActors DESC

感谢使用正确的显式 JOIN 语法。简单规则:不要在 FROM 子句中使用逗号。

注意:我认为 2 的使用可能会从某些符合 ANSI 标准的数据库的未来版本中删除。

是 - 您可以按列顺序排序。但是,您需要注意,如果 select 列表更改(如果添加或删除列,如果列顺序更改等),如果 order by 子句未更改,您将看到意想不到的结果修改以反映更改。

一些 RDMBS 允许您给列一个别名并在 order by 子句中使用它。但是不确定 MySql 是否是其中之一。

SELECT movie.title, COUNT(actorid) NumMovies
FROM movie JOIN casting on movie.id=movieid
WHERE yr='1978'
GROUP BY casting.movieid
ORDER BY NumMovies DESC