2016-05-07 9 views
0

すべての行を特定の順序で出力するMySQLクエリを構築するのに役立つ必要があります。テーブル定義には、id,sub_id、およびnameが含まれています。 sub_id列は、特定の行をidにグループ化する必要があることを示すために使用され、sub_idが空白/ 0/NULLの場合、その行は最上位行になります。サブグループ順

希望のソート順はnameです。ただし、すべてのsub_id行を対応するid行内にグループ化したい場合を除きます。各サブグループ内では、各行を名前でソートする必要があります。例えば

は、この順序付けられていないテーブル所与:

id sub_id name 
===================== 
1 0  bananas 
2 0  apples 
3 0  apricots 
4 2  strawberries 
5 2  cherries 
6 1  oranges 

所望の順序である:

id sub_id name 
===================== 
2 0  apples 
5 2  cherries 
4 2  strawberries 

3 0  apricots 

1 0  bananas 
6 1  oranges 

(例示の目的のみのためにサブグループ間の間隔)

ヘルプ?前もって感謝します!

答えて

0

これはそれを行う必要があります:巧妙な答えを

SELECT t.id, t.sub_id, t.name 
FROM table t LEFT JOIN table p on t.sub_id = p.id 
ORDER BY COALESCE(p.id, t.id), t.name 
+0

感謝を。しかし、私はこれが最初にIDで並べ替えると思う。たとえば、id = 1、name = 'xyz'、id = 2、name = 'abc'の行は、間違って並べ替えられます。また、sub_id = NULLの行をサブグループ内で最初にソートする必要があります。 – yahermann

+0

これはhttp://sqlfiddle.com/のためにsqlfiddleを設定することをお勧めします。もしそれがうまくいかないと思っているのであれば、それは本当にうまくいきません。 – Bulat

関連する問題