Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在配置单元中查找具有非零值的列_Sql_Apache_Hive - Fatal编程技术网

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开始。