如何根据两列mysql获得提升结果。就像我想要1,2,3,4,5或1,1,2,2,3,4,4,5,5,但其他列上的其他值。
sample table
-------------
col1 col2
741 0
742 0
743 0
744 0
745 743
------------
Expected output
-------------
col1 col2
741 0
742 0
743 0
745 743
744 0
------------
当通过col1时,它会在col2上找到下一个数字,所以它会在asc上添加。
答案 0 :(得分:0)
您可以在订单中使用案例
试试这个:
SELECT
FROM tablename
ORDER BY
CASE
when col1 < col2 AND NOT col1 = 0 AND NOT col2 = 0 then col1
when col1 < col2 AND col1 = 0 then col2
when col2 < col1 AND NOT col1 = 0 AND NOT col2 = 0 then col2
when col2 < col1 AND col2 = 0 then col1
END DESC
答案 1 :(得分:0)
我不能保证这会在所有情况下都有效,但它应该满足你的例子:
SELECT col1, col2
FROM test
ORDER BY IF(col2 = 0, col1, col2), col1;
我们的想法是,我们将col2
合并到col1
进行排序,因此排序可以看到您的数据:
741
742
743
743 -- pulled from col2
744
然后将实际的col1
用作决胜局,将映射的行放在第二位,假设col1
总是大于col2
。
答案 2 :(得分:0)
@shmosel。感谢它帮助的答案。但就像你说的那样,它并不适用于所有情况。当col2具有已经在顶部调用的值时,它现在给出不同的结果。我会尝试清楚解释。
现在这是带有附加值的新表。
-------------
col1 col2
741 0
742 0
743 0
745 0
746 743
747 0
748 0
749 0
750 746
751 0
752 746
------------
以下是基于您第一个答案的结果。
-------------
col1 col2
741 0
742 0
743 0
746 743
745 0
750 746
752 746
747 0
748 0
749 0
751 0
------------
我期待的是这个
-------------
col1 col2
741 0
742 0
743 0
746 743
750 746
752 746
745 0
747 0
748 0
749 0
751 0
------------
因此,因为746(col1)在col2上有下一个数字,所以应该优先考虑。我忘了提到col1是唯一的而col2而不是。 col2基于col1插入。所以这就算数了。 col 1然后col2。抱歉未解决的问题。