2017-05-19 12 views
1

だから、私はこのような 'films'というテーブルを持っています。MySQLクエリ結果のソート中にグループ分けする方法は?

|id|title |rating| 
|1 |Qwerty|4  | 
|2 |Zxcv |0  | 
|3 |Asdf |2  | 
|4 |Jkl |0  | 
|5 |Uiop |5  | 

だから私はテーブルを照会すると、結果はタイトルでソートする必要がありますが、ゼロより大きい定格を持つすべてのデータが最初に示し、そのテーブルからたとえば、私が希望しても、結果が制限される可能性がこのようなクエリ結果。 UNION ALLを使用しているとき、私はこのコードを試してみました

expected result with LIMIT 5 
|id|title |rating| 
|3 |Asdf |2  | 
|5 |Uiop |5  | 
|1 |Qwerty|4  | 
|4 |Jkl |0  | 
|2 |Zxcv |0  | 

expected result with LIMIT 2 
|id|title |rating| 
|3 |Asdf |2  | 
|5 |Uiop |5  | 

(SELECT * FROM films WHERE rating > 0 ORDER BY title) 
UNION ALL 
(SELECT * FROM films WHERE rating = 0 ORDER BY title) LIMIT 5 

しかし()内部order byが、無視されます。

答えて

0

あなたはこの場合

mysql> select * from films order by concat(if(rating > 0,0, 1), title); 
+-------+--------+ 
| title | rating | 
+-------+--------+ 
| aaa |  3 | 
| ccc |  5 | 
| bbb |  0 | 
+-------+--------+ 
3 rows in set (0.00 sec) 

のようなものを使用することができるはずの文

ようによる注文に何かを構築することができ、0または1のとき、タイトル名の前に付けます並べ替えに使用できる「a」と「b」などのものを使用することができます。

+1

これは実際にWOWです。どうもありがとう!! 非常に素晴らしいロジックです。回避策としてconcatとifを使用しています。 – Frumentius

0

社内組合による注文は使用しないでください。これにより、ソートの2つのレイヤーが発生します。理由の詳細については、こちらをお読みください:https://dev.mysql.com/doc/refman/5.7/en/union.html

をご例えば、すべての映画を見つけて、タイトルや評価によってそれらを並べ替えるでしょうクエリは次のとおりです。

SELECT * FROM films ORDER BY rating DESC, title; 

このクエリは、最初にすべてのフィルムは、オーダーグラブより高い評価で最初に評価する(DESCで指定し、次に映画タイトルで指定します)。クエリと同じ順序で読み込みます。

+0

これも試しましたが、結果が期待通りではありません。タイトルは私には表示されませんnオーダー。あなたのクエリコードの私の例では、結果は(id)5,1,3,4,2になりますが、上記のように私は結果が3,5,1,4,2であることを期待しています。タイトルが順番に表示され、評価の高いすべての映画がグループ化されます。 – Frumentius

+0

答えで解決するオリバーから、とにかくあなたの返事をありがとう! – Frumentius

0

orderbyここであなたは順序がどのように働いているかを理解するよりも

(SELECT * FROM films WHERE rating > 0) 
UNION ALL 
(SELECT * FROM films WHERE rating = 0 ORDER BY title) ORDER BY title LIMIT 5 
+0

私もこれを試しましたが、結果は期待通りではありません。なぜなら結局組合の結果は名前で並べ替えられますが、上の結果が0以上のすべての映画をグループ化しないからです。クエリコードは結果が(ID)3,4,1,5,2になりますが、上記のように3,5,1,4,2の結果が出ると思いますが、タイトルは順番に表示されるためです、すべての映画をグループ化して評価結果を上位に表示する – Frumentius

+0

答えで解決Oliverから、お返事いただきありがとうございます! – Frumentius

関連する問題