Impala SQL、return 值(如果字符串存在于值的子集中)

Impala SQL, return value if a string exists within a subset of values

我有一个 table,其中 id 字段(不是主键)包含 1null。在过去的几年中,任何给定的部分都可以使用这些可能选项中的一个或两个输入多次。

我正在尝试编写一个语句,如果有一个 1 与 select 语句相关联,它将 return 一些值。有很多半重复的行,有些是 1,有些是 null,但是如果有 1,我想 return true ,如果只有 null 个值,我想 return false。我不确定如何对此进行编码。

如果这是我的SELECT part,id from table where part = "ABC1234"声明

part      id
ABC1234   1
ABC1234   null
ABC1234   null
ABC1234   null
ABC1234   1

我想写一个 returns true 的语句,因为 1 存在于 这些行中的至少一行中。

我最接近的是使用 CASE 语句,但我还没有完全做到:

SELECT
a1.part part,  
CASE WHEN a2.id is not null             
  THEN
        'true'
  ELSE
        'false'
  END AS            id
from table.parts a1, table.ids a2 where a1.part = "ABC1234" and a1.key = a2.key;

我也试过下面的情况:

CASE WHEN exists
       (SELECT id from table.ids where id = 1)               
  THEN

但我收到错误 subqueries are not supported in the select list

对于上面的 SELECT 语句,我如何 return 1 行显示:

part      id
ABC1234   true

您可以使用条件聚合来检查某个部分是否至少有一行 id=1。

SELECT part,'True' id
from parts
group by part
having count(case when id = 1 then 1 end) >= 1

为了return false 当孩子们都是null时使用

select part, case when id_true>=1 then 'True'
                  when id_false>=1 and id_true=0 then 'False' end id
from (
SELECT part,
count(case when id = 1 then 1 end) id_true,
count(case when id is null then 1 end) id_false,
from parts
group by part) t