HiveQL中where後面的and 和or 處理

2021-06-16 14:42:46 字數 1298 閱讀 2740

昨天我在嘗試寫乙個很簡單的hiveql:語句如下

select ,a.ver,a.vid,a.wid,a.type,count(*) from (select stat_date,ver,get_json_object(json,"$.vid") as vid,get_json_object(json,"$.wid") as wid,get_json_object(json,"$.type") as type from iphonevv_ where  stat_date= and ver >= '3.5.0' and get_json_object(json,"$.type")=4 or  get_json_object(json,"$.type")=5 or  get_json_object(json,"$.type")=6 )a  group by a.stat_date,a.ver,a.vid,a.wid,a.type

我的想法是:stat_date= and ver >= '3.5.0',後面的都是or就行,但是結果並不是這樣,出現了很多ver不是大於等於3.5.0的,我糾結了很久,都不知道是哪兒出了問題,為什麼ver >= '3.5.0' 不起作用呢?今天查了下才發現,原來是where後面的and和or的問題導致。

結果後來我修改為:

select ,a.ver,a.vid,a.wid,a.type,count(*) from (select stat_date,ver,get_json_object(json,"$.vid") as vid,get_json_object(json,"$.wid") as wid,get_json_object(json,"$.type") as type from iphonevv_ where  stat_date= and ver >= '3.5.0' and (get_json_object(json,"$.type")=4 or  get_json_object(json,"$.type")=5 or  get_json_object(json,"$.type")=6 ))a  group by a.stat_date,a.ver,a.vid,a.wid,a.type

將or的條件放在()之內,問題就解決了。

where 後面如果有and,or的條件,則or自動會把左右的查詢條件分開,即先執行and,再執行or。原因就是:and的執行優先順序最高!

關係型運算子優先順序高到低為:not and or

問題的解決辦法是:

用()來改變執行順序!!!!

where後面的行子查詢使用

行子查詢 結果集一行多列或多行多列 案例 查詢員工編號最小並且工資最高的員工資訊 select from employees where employee id,salary select min employee id max salary from employees 1.查詢員工編號最小 se...

089 where後面的列子查詢

多行子查詢 多行比較操作符 innot in anysom allin 與 any 等價 not in 與 all 等價 返回location id是1400或1700的部門中的所有員工姓名 1產尋location是1400 1700的部門編號 select distinct department ...

090 where後面的行子查詢

查詢員工編號最小並且工資最高的員工資訊 此員工不一定存在 以前的做法 select from employees where employee id select min employee id from employees and salary select max salary from emp...