HiveWhere語句及分組

Where語句

  1. 使用WHERE子句,將不滿足條件的行過濾掉
  2. WHERE子句緊隨FROM子句
  3. 案例實操
    查詢出薪水大於1000的所有員工
hive (default)> select * from emp where sal >1000;

注意:where子句中不能使用字段別名。

比較運算符(Between/In/ Is Null)

下面表中描述了謂詞操作符,這些操作符同樣可以用於JOIN…ON和HAVING語句中

操作符 支持的數據類型 描述
A=B 基本數據類型 如果A等於B則返回TRUE,反之返回FALSE
A<=>B 基本數據類型 如果A和B都爲NULL,則返回TRUE,其他的和等號(=)操作符的結果一致,如果任一爲NULL則結果爲NULL
A<>B, A!=B 基本數據類型 A或者B爲NULL則返回NULL;如果A不等於B,則返回TRUE,反之返回FALSE
A<B 基本數據類型 A或者B爲NULL,則返回NULL;如果A小於B,則返回TRUE,反之返回FALSE
A<=B 基本數據類型 A或者B爲NULL,則返回NULL;如果A小於等於B,則返回TRUE,反之返回FALSE
A>B 基本數據類型 A或者B爲NULL,則返回NULL;如果A大於B,則返回TRUE,反之返回FALSE
A>=B 基本數據類型 A或者B爲NULL,則返回NULL;如果A大於等於B,則返回TRUE,反之返回FALSE
A [NOT] BETWEEN B AND C 基本數據類型 如果A,B或者C任一爲NULL,則結果爲NULL。如果A的值大於等於B而且小於或等於C,則結果爲TRUE,反之爲FALSE。如果使用NOT關鍵字則可達到相反的效果。
A IS NULL 所有數據類型 如果A等於NULL,則返回TRUE,反之返回FALSE
A IS NOT NULL 所有數據類型 如果A不等於NULL,則返回TRUE,反之返回FALSE
IN(數值1, 數值2) 所有數據類型 使用 IN運算顯示列表中的值
A [NOT] LIKE B STRING 類型 B是一個SQL下的簡單正則表達式,也叫通配符模式,如果A與其匹配的話,則返回TRUE;反之返回FALSE。B的表達式說明如下:‘x%’表示A必須以字母‘x’開頭,‘%x’表示A必須以字母’x’結尾,而‘%x%’表示A包含有字母’x’,可以位於開頭,結尾或者字符串中間。如果使用NOT關鍵字則可達到相反的效果
A RLIKE B, A REGEXP B STRING 類型 B是基於java的正則表達式,如果A與其匹配,則返回TRUE;反之返回FALSE。匹配使用的是JDK中的正則表達式接口實現的,因爲正則也依據其中的規則。例如,正則表達式必須和整個字符串A相匹配,而不是隻需與其字符串匹配

案例實操

  1. 查詢出薪水等於5000的所有員工
hive (default)> select * from emp where sal =5000;
  1. 查詢工資在500到1000的員工信息
hive (default)> select * from emp where sal between 500 and 1000;
  1. 查詢comm爲空的所有員工信息
hive (default)> select * from emp where comm is null;
  1. 查詢工資是1500或5000的員工信息
hive (default)> select * from emp where sal IN (1500, 5000);

Like和RLike

  1. 使用LIKE運算選擇類似的值
  2. 選擇條件可以包含字符或數字:
    % 代表零個或多個字符(任意個字符)。
    _ 代表一個字符。
  3. RLIKE子句是Hive中這個功能的一個擴展,其可以通過Java的正則表達式這個更強大的語言來指定匹配條件。

案例實操

  1. 查找以2開頭薪水的員工信息
hive (default)> select * from emp where sal LIKE '2%';
  1. 查找第二個數值爲2的薪水的員工信息
hive (default)> select * from emp where sal LIKE '_2%';
  1. 查找薪水中含有2的員工信息
hive (default)> select * from emp where sal RLIKE '[2]';

邏輯運算符(And/Or/Not)

操作符 含義
AND 邏輯並
OR 邏輯或
NOT 邏輯否

案例實操

  1. 查詢薪水大於1000,部門是30
hive (default)> select * from emp where sal>1000 and deptno=30;
  1. 查詢薪水大於1000,或者部門是30
hive (default)> select * from emp where sal>1000 or deptno=30;
  1. 查詢除了20部門和30部門以外的員工信息
hive (default)> select * from emp where deptno not IN(30, 20);

分組

Group By語句

GROUP BY語句通常會和聚合函數一起使用,按照一個或者多個列隊結果進行分組,然後對每個組執行聚合操作。
案例實操:

  1. 計算emp表每個部門的平均工資
hive (default)> select t.deptno, avg(t.sal) avg_sal from emp t group by t.deptno;
  1. 計算emp每個部門中每個崗位的最高薪水
hive (default)> select t.deptno, t.job, max(t.sal) max_sal from emp t group by t.deptno, t.job;

Having語句

having與where不同點

  1. where後面不能寫分組函數,而having後面可以使用分組函數。
  2. having只用於group by分組統計語句。

案例實操

  1. 求每個部門的平均薪水大於2000的部門
    求每個部門的平均工資
hive (default)> select deptno, avg(sal) from emp group by deptno;

求每個部門的平均薪水大於2000的部門

hive (default)> select deptno, avg(sal) avg_sal from emp group by deptno having avg_sal > 2000;

關注微信公衆號
簡書:https://www.jianshu.com/u/0278602aea1d
CSDN:https://blog.csdn.net/u012387141

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章