Mysql根据不同列的最小值选择列

时间:2012-08-09 15:51:03

标签: mysql

这可能没有任何意义,但我想要做的是根据另一列最少的时间选择一列。例如,我有3个int列和3个varchar列

在下面的示例中,Unit = int,Link = varchar

Unit1|Link1|Unit2|Link2|Unit3|Link3
72|www.google.com|43|www.yahoo.com|9212|www.lycos.com

在上面的示例中,Unit2最少,所以我想选择Link2。

这就是我选择最少的方式,所以任何帮助都会很棒

select Least(
                       Coalesce(myTable.Unit1,
                                myTable.Unit2,
                                myTable.Unit3),
                       Coalesce(myTable.Unit1,
                                myTable.Unit2,
                                myTable.Unit3),
                       Coalesce(myTable.Unit1,
                                myTable.Unit2,
                                myTable.Unit3))
                       AS LowestUnit
from myTable

2 个答案:

答案 0 :(得分:0)

一种方法:

SELECT CASE WHEN Unit1 = LEAST(Unit1,Unit2,Unit3) THEN Link1 
            WHEN Unit2 = LEAST(Unit1,Unit2,Unit3) THEN Link2
            WHEN Unit3 = LEAST(Unit1,Unit2,Unit3) THEN Link3
       END AS LinkL

(您可以使用ELSE Link3代替第三个WHEN获得相同的结果,我只是检查所有三个,并让ELSE默认为NULL。)

等效且更简洁:

SELECT CASE LEAST(Unit1,Unit2,Unit3)
            WHEN Unit1 THEN Link1 
            WHEN Unit2 THEN Link2
            WHEN Unit3 THEN Link3
       END AS LinkL

答案 1 :(得分:0)

这可能会有所帮助:

drop table if exists myTable;

create table myTable
(Unit1 int unsigned not null,
Link1 varchar(50) not null,
Unit2 int unsigned not null,
Link2 varchar(50) not null,
Unit3 int unsigned not null,
Link3 varchar(50) not null
);

insert into myTable values (72,'www.google.com',43,'www.yahoo.com',9212,'www.lycos.com');

select 
case least(Unit1,Unit2,Unit3)
when Unit1 then Link1
when Unit2 then Link2
when Unit3 then Link3
end as Link
from myTable;