我试图在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
,则接受答案(正确)。有什么理由吗?
答案 0 :(得分:1)
这三个都应该被接受:
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
子句中使用逗号。
作为注释:我认为可能会从ANSI兼容数据库的某些未来版本中删除2
的使用。
答案 1 :(得分:0)
是 - 您可以按列序号排序。但是,您需要注意,如果选择列表发生更改(如果添加或删除了列,如果列顺序已更改,等等),如果未修改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