我试图从MYSQL表中选择前20行(我对MYSQL很新,我甚至不确定它是否可以称为表)。我还有一些条件,我可以通过内部连接来满足,而不是之间等等。经过所有处理后,我有一个如下表格
name,h1,h2,h3
a , 2, 4, 5
b , ,54, 5
c ,65, 7, 8
d , 6, , 3
e , 7, ,
f ,-1, 3,-5
' ,,'表示该组合没有数据。我更喜欢像NA' NA'那里 最重要的是,我想选择最长的前20行。我的意思是
name,length
a,3
b,2
c,3
d,2
e,1
f,3
我不需要上表,但根据长度,我需要前20行。我可以使用R来做,但表格非常庞大,我想在MYSQL中处理它,然后将表格导出到我的计算机上。任何帮助将受到高度赞赏。
答案 0 :(得分:1)
如果你想要没有值的列的NA,你可以使用IFNULL(col,'NA')
select name , h1,h2,h3
from table
order by LENGTH(CONCAT(h1,h2,h3)) desc
limit 20
答案 1 :(得分:0)
如果我正确理解“长度”,则表示非NUL值的数量。如果是这样,您可以将其计算为:
select t.*
from table t
order by (h1 is not null) + (h2 is not null) + (h3 is not null) desc
limit 20;
MySQL处理布尔表达式整数,其中true为1,false为0.因此,order by
中的表达式计算非NULL值的数量。然后它按降序对结果进行排序,并选择具有最多非NULL值的20行。