通过#column(sqlzoo示例)按COUNT(某物)与订单排序

时间:2015-06-11 12:02:20

标签: mysql sql mariadb

我试图在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,则接受答案(正确)。有什么理由吗?

2 个答案:

答案 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