2017-04-26 31 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到最低),但我不想列A为具有相同的值下,以每other.Sorting上述将有33 & 36(与100022)彼此相邻(和42 & 48),100038彼此相邻。只要列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没有两个值出现相邻

谢谢 布拉德

+0

出现b进行排序大致 '低到高' – Strawberry

+0

什么是柱A之间的关系, Col B?如果它们不相互关联,为什么我们必须将它们存储在同一个表中并尝试排序? –

+0

哪所学校的作业? – MarmiK

回答

0

,那么一个选择是行号在给定的ColA块分配给每个值,然后以保证相邻的值不会发生。

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