0

2つのテーブルがあります。1つはアイテムで、もう1つはアイテムにフラグを付けたユーザーです。次に例を示します。

items:                              flags:

item_id | item_name | owner_id      item_id | flagged_by
------------------------------      --------------------
1       | foo       | 1             1       | 2
2       | bar       | 2             2       | 4
3       | baz       | 2             2       | 7
                                    2       | 7

フラグテーブルにあるすべてのアイテムに関する情報を、フラグの数順にアイテムテーブルから選択したいと思います。したがって、上記の例では、希望する出力は次のようになります。

item_id | item_name | owner_id
------------------------------
2       | bar       | 2
1       | foo       | 1

私が今持っているクエリはselect * from items where id in (select item_id from flags group by item_id order by count(*) desc);

内部クエリが正しく機能することはわかっていますが(すべてのIDを正しい順序で返します)、クエリ全体を実行すると、アイテムIDの順序でアイテムを取得するだけです。クエリを修正するにはどうすればよいですか?

4

1 に答える 1

1

現在、サブクエリのみを順序付けています。これは、外側のクエリの順序には影響しません。サブクエリを使用するのではなくテーブルを結合すると、クエリ全体に順序を適用できるはずです。

  select i.*
    from items i
    join flags f on i.item_id = f.item_id
group by i.item_id
order by count(f.item_id) desc

デモ: http://www.sqlfiddle.com/#!2/f141b/2

于 2012-04-20T23:42:34.327 に答える