2012-01-15 8 views
3

ORDER BYに列番号と集計関数を使用すると、2つの異なる結果が得られます。これらの2つの方法の違いは何ですか? (私は彼らが同じ出力を持っていると思った)列番号または集計関数を使用したSQL ORDER BY

キャストリストサイズの順番で1978の映画をリストアップする。

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)を使用して、以下の3つのテーブルがあります。すべては最後の行

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

私はそれが信じがたいと思います。変更を加えたり、何かを残したりすることなく、両方の出力を両方のクエリで投稿できますか? –

+7

行間の結び付きを除いて、同じ出力でなければなりません。タイを使用すると、実行ごとに順序が異なる場合があります。タイトルを列で2番目の順序で追加して、結び付きを持つ永続ソート順を取得します。 –

+1

@MikaelEriksson - これがMySQLの場合は、確かです。しかし、ベンダー固有の動作です。例えば、MS SQL Serverでは、最初はスカラー定数 '2'で順序付けされ、*フィールド2 *とは関係がありません。 – MatBailie

答えて

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 
関連する問題