2012-01-15 51 views
3

当我尝试ORDER BY具有列号和聚合函数时,我得到2个不同的结果。这两种方法有什么区别? (我以为他们会有相同的输出)具有列号或聚合函数的SQL ORDER BY

列出1978年电影的顺序演员名单大小。有是以下3个表:

movie(id, title, yr, director) 
actor(id, name) 
casting(movieid, actorid, ord) 

回答1使用ORDER BY与列号:

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

使用COUNT(a.id)。一切都是除最后一行

... 
ORDER BY COUNT(a.id) DESC 
+1

我会觉得很难相信。你可以发布两个查询两个他们的输出没有改变或留下什么? – 2012-01-15 21:05:11

+7

它应该是相同的输出,除非行之间有联系。使用关系,每次执行的顺序可以不同。按列添加标题作为第二顺序以获取带有关系的持久排序顺序。 – 2012-01-15 21:34:21

+1

@MikaelEriksson - 如果这是MySQL,当然。但它是供应商特定的行为。例如,在MS SQL Server中,第一个按标量常量'2'排序,并且与* field 2 *没有关系。 – MatBailie 2012-01-18 10:49:15

回答

0

我会建议你做一个子查询和订单,对于干净的结果

0

我觉得小丑有它一样。下面是一个例子:

select title, actor_count from (
    SELECT title 
     ,COUNT(a.id) actor_count 
    FROM movie m 
     ,casting c 
     ,actor a 
    WHERE m.id=movieid 
    AND a.id=actorid 
    AND yr=1978 
    GROUP BY title) subquery 
order by actor_count 
相关问题