Sql 在配置单元中查找具有非零值的列
假设您有一个包含Sql 在配置单元中查找具有非零值的列,sql,apache,hive,Sql,Apache,Hive,假设您有一个包含n列的数据库,从col1到coln,其中n很大 是否可以找到所有行,以便从colk到coln中至少有一列具有非零值(假设列是非负数,并且可能缺少数字)?您可以使用Hive的合并函数(它获取一系列列输入的第一个非空值)结合if语句,类似于: select * from table where coalesce(if(col1 > 0, 1, null), if(col2 > 0, 1, null)...) = 1 ; 上述函数将返回至少一个在coalesce函数中指
n
列的数据库,从col1
到coln
,其中n
很大
是否可以找到所有行,以便从
colk
到coln
中至少有一列具有非零值(假设列是非负数,并且可能缺少数字)?您可以使用Hive的合并函数(它获取一系列列输入的第一个非空值)结合if语句,类似于:
select *
from table
where coalesce(if(col1 > 0, 1, null), if(col2 > 0, 1, null)...) = 1
;
上述函数将返回至少一个在coalesce函数中指定的列返回值为1的任何行。让我知道这是否适合你
编辑:另一种方法更简洁(不需要列出所有列),但灵活性较低:
select *
from table tb
where sort_array(array(tb.*))[n-1] > 0
;
上面将对数组进行升序排序,这样您就可以检查数组中的最大值是否大于零,并只返回那些行。为什么这么多复杂的查询都使用这个 插入DB.1.1表\u名称\u 1 从DB.2_表_名称_2中选择* 其中,表\u name\u 1.COL\u name>0 插入覆盖DB.1.table_name_1 从DB.2_表_名称_2中选择*
其中table_name_1.COL_name>0什么意思,“缺失”。有些列包含空值?如果我有许多列,是否可以告诉函数在不列出所有列的情况下尝试所有列?我编辑了我的原始答案,以包含一个不需要您列出所有列的方法。很抱歉再次打扰您。[n-1]是什么意思?n=表中的列数。这些列的数组的最后一个元素可由数组[n-1]访问,因为配置单元数组从0开始。