1

これはいくつかの並べ替えです。ID、名前、評価のテーブルがあります。評価に基づいて 10 の最高のアイテムをリストしたいのですが、それで問題ありません。

SELECT id FROM items ORDER BY ratings DESC LIMIT 10

しかし、ここで難しい部分があります。評価に基づいて 10 の最高のアイテムをリストしたいのですが、アルファベット順に並べます。私は試した

SELECT id FROM items ORDER BY ratings DESC, names ASC LIMIT 10

SELECT id FROM items ORDER BY names ASC, ratings DESC  LIMIT 10

しかし、どちらも望ましい結果をもたらしません。

4

2 に答える 2

9

サブクエリを使用できます:

SELECT *
FROM (
   SELECT id, names
   FROM items 
   ORDER BY ratings DESC
   LIMIT 10
   ) t
ORDER BY names

編集:詳細説明

元のクエリは評価 DESC で並べ替え、次に名前で並べ替えます。同じ評価の名前のみを並べ替えます。したがって、2 つのアイテムの評価が同じである場合、それら 2 つが名前で並べ替えられます。すべてのレコードを最初に評価で並べ替え、次に名前で並べ替えます (同じ評価内で)。

于 2013-04-01T17:35:48.297 に答える
3
SELECT id, name, rating
FROM
    (SELECT id, name, rating FROM items ORDER BY ratings LIMIT 10) t
ORDER BY name

これは でトップ 10 を取得しrating、 で並べ替えますname

クエリが正しくない理由:名前で行を並べ替え、次に評価で (または逆の順序で) 行を並べ替え、並べ替えの実行後に上位 10 を取得します。最初の並べ替えを行い、上位 10 件を取得してから、2 番目の列の値を使用してこれらの 10 件の結果を並べ替える必要があります。

于 2013-04-01T17:36:04.227 に答える