按 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 BY
从 ORDER 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
我试图解决 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 BY
从 ORDER 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