如何使用 HIVE 在 WHERE 语句中对 OR 子句进行分组
How do you group OR clause in WHERE statement using HIVE
我想通过以下方式查询
(statement1 AND statement2 AND (statement3 OR statement4 ))
这是我的配置单元查询,我确认它不起作用,因为它只有 returns statement3,而且我知道在某些情况下 statement4 是正确的
SELECT
cid,
SUM(count) AS total_count
FROM
count_by_day
WHERE
time >= 1435536000
AND time < 1436140800
AND(
cid = '4eb3441f282d4d657a000016'
OR cid = '14ebe153121a863462300043d'
)
GROUP BY
cid
谁能告诉我哪里出了问题?谢谢
- count是一个真正的变量名吗?仔细检查一下。
还要检查以确保您的时间是数字类型,可能是 bigint。如果不是像这样将其转换为大整数:
WHERE cast(time as bigint) >= 1435536000 AND cast(time as bigint) < 1436140800
尝试将您的 or 语句更改为 in 语句。
SELECT
cid,
SUM(count) AS total_count
FROM
count_by_day
WHERE time >= 1435536000 AND time < 1436140800
AND cid in('4eb3441f282d4d657a000016','14ebe153121a863462300043d')
GROUP BY
cid;
一次尝试每个更改,这样您就知道解决方法是什么。
查询 1:
Select A,B,C
From
Table1 t1
Join
Table2 t2
On
T1.field1=T2.field1 OR
T1.field2 = T2.field2
查询 2:
Select A,B,C
From
Table1 t1
Join
Table2 t2
On
T1.field1=T2.field1
Union
Select A,B,C
From
Table1 t1
Join
Table2 t2
On
T1.field2 = T2.field2
总是学会在关系数据库中使用 UNION 而不是 OR。尝试看看 union 是否能解决您的问题。
select cols
from table
where statement1 AND statement2 AND statement3
union all
select cols
from table
where statement1 AND statement2 AND statement4
我想通过以下方式查询
(statement1 AND statement2 AND (statement3 OR statement4 ))
这是我的配置单元查询,我确认它不起作用,因为它只有 returns statement3,而且我知道在某些情况下 statement4 是正确的
SELECT
cid,
SUM(count) AS total_count
FROM
count_by_day
WHERE
time >= 1435536000
AND time < 1436140800
AND(
cid = '4eb3441f282d4d657a000016'
OR cid = '14ebe153121a863462300043d'
)
GROUP BY
cid
谁能告诉我哪里出了问题?谢谢
- count是一个真正的变量名吗?仔细检查一下。
还要检查以确保您的时间是数字类型,可能是 bigint。如果不是像这样将其转换为大整数:
WHERE cast(time as bigint) >= 1435536000 AND cast(time as bigint) < 1436140800
尝试将您的 or 语句更改为 in 语句。
SELECT cid, SUM(count) AS total_count FROM count_by_day WHERE time >= 1435536000 AND time < 1436140800 AND cid in('4eb3441f282d4d657a000016','14ebe153121a863462300043d') GROUP BY cid;
一次尝试每个更改,这样您就知道解决方法是什么。
查询 1:
Select A,B,C
From
Table1 t1
Join
Table2 t2
On
T1.field1=T2.field1 OR
T1.field2 = T2.field2
查询 2:
Select A,B,C
From
Table1 t1
Join
Table2 t2
On
T1.field1=T2.field1
Union
Select A,B,C
From
Table1 t1
Join
Table2 t2
On
T1.field2 = T2.field2
总是学会在关系数据库中使用 UNION 而不是 OR。尝试看看 union 是否能解决您的问题。
select cols
from table
where statement1 AND statement2 AND statement3
union all
select cols
from table
where statement1 AND statement2 AND statement4