mysql中整数的匹配函数

mysql中整数的匹配函数

我有一个表结构

 ID   Col_1   col_2  col_3  col_4  max
    1    34     23     45     32   45
    2    20     19     67     18   67
    3    40     10     76     86   86


我想派出类似的东西,等级列是通过针对“ col_1”,“ col_2”,“ col_3”,“ col_4”等列查找“ max”列值而得出的。并且应该返回索引或列号,其中col_1为1,col_2为2,依此类推

ID   Col_1   col_2  col_3  col_4  max  rank
    1    34     23     45     32   45    3
    2    20     19     67     18   67    3
    3    40     10     76     86   86    4


这是我尝试过的但无法获得所需的输出。
任何帮助,将不胜感激。

 SELECT ID,Col_1,col_2,col_3,col_4,max, match(max) AGAINST(col_1,col_2,col_3,col_4) from demo;

最佳答案

这是一种方法,相当蛮力:

select d.*,
       (case greatest(col_1, col_2, col_3, col_4, col_5)
            when col_1 then 1
            when col_2 then 2
            when col_3 then 3
            when col_4 then 4
            when col_5 then 5
        end) as max_index
from demo d;


注意:进行此类操作的需求表明数据模型有缺陷。列值可能应该存储在每行具有一个这样的值的表中。

我还应该注意,您可以使用field()进行此操作:

select d.*,
       field(greatest(col_1, col_2, col_3, col_4, col_5),
             col_1, col_2, col_3, col_4, col_5)
from demo d;


在计算上这大约是相同的努力,但是长度肯定要短得多。

关于mysql - mysql中整数的匹配函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38656568/

10-11 05:00