2017-04-26 12 views
0

私はソートしようとするときにいくつかのロジックを解こうとして問題があります。シンプルなロジックを理解するためにExcelに戻ってきました。MySQLで並べ替える/

What I have is :- 
ColA ColB 
100022 33 
100022 36 
100024 28 
100024 32 
100024 41 
100024 52 
100026 38 
100038 28 
100038 42 
100038 48 
100038 59 

私は何をしたいが列B(最低にheightest)でソートされますが、私は上記(100022で)33 & 36を持っていますother.Sortingそれぞれに次の列Aが同じ値を持つようにしたいいけません互いに隣り合って100038の隣に(そして、42 & 48)。列Bが最高の状態で並べ替えられている限り、列Aの値は決して隣り合うことはありません(絶対に必要な場合を除き)。私は満足しています。

理想的には、私はこのようなもので終わるためのロジックの後にしています。..

100024 28 
100038 28 
100022 33 
100024 32 
100022 36 
100026 38 
100038 42 
100024 41 
100038 48 
100024 52 
100038 59 

すべてのヘルプやアイデアをいただければ幸いです。

あなたはColAからの二つの値が隣接表示されていないことを強制したい場合は、一つの選択肢は、与えられたColAブロック内の各値に行番号を割り当てるには、その後、注文が確保することですあなたに ブラッド

+0

B 'は最高に最低' おおまかにソートしていると思わ – Strawberry

+0

コルAとの間の関係は何であるとCol B?彼らがお互いに関連していない場合、私たちはなぜそれらを同じテーブルに保管して並べ替えようとしますか? –

+0

どの学校がどの課題に割り当てられていますか? – MarmiK

答えて

0

ありがとうございました隣接する値は発生しません。

SET @row_number = 0; 
SET @ColA = NULL; 

SELECT t.ColA, t.ColB 
FROM 
(
    SELECT 
     @row_number:=CASE WHEN @ColA = ColA THEN @row_number + 1 ELSE 1 END AS rn, 
     @ColA:=ColA AS ColA, 
     ColB 
    FROM 
     yourTable 
    ORDER BY ColA, ColB DESC 
) t 
ORDER BY t.rn, t.ColB DESC 

あなたは私が行っている最高から最低までソートColBを、望んでいたあなたの質問に言及しました。昇順で注文する場合は、上記のクエリからDESCを削除してください。

出力:

enter image description here

ここにデモ:

Rextester

関連する問題