Impala SQL、return 值(如果字符串存在于值的子集中)
Impala SQL, return value if a string exists within a subset of values
我有一个 table,其中 id
字段(不是主键)包含 1
或 null
。在过去的几年中,任何给定的部分都可以使用这些可能选项中的一个或两个输入多次。
我正在尝试编写一个语句,如果有一个 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
我有一个 table,其中 id
字段(不是主键)包含 1
或 null
。在过去的几年中,任何给定的部分都可以使用这些可能选项中的一个或两个输入多次。
我正在尝试编写一个语句,如果有一个 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