1. 程式人生 > >mysql中ifnull和hive中if函式的轉換

mysql中ifnull和hive中if函式的轉換

先說說,在mysql中,ifnull函式的用法,其表示式如下:

IFNULL(expr1,expr2)

如果 expr1 不是 NULL,IFNULL() 返回 expr1,否則它返回 expr2。IFNULL()返回一個數字或字串值,取決於它被使用的上下文環境。

舉個應用場景,比如某一個欄位定義為int型別,其預設值為0,但是在sql查詢過程中,有可能出現為null,這個時候,我們就可以用ifnull來判斷一下,如果結果為null,就給預設值0,下面給出一個例項:

    ifnull(
        sum(
            CASE
            WHEN flag = '全量' THEN
                g.pv
            END
        ),
        0
    ) AS all_pv

然而,在hive寫HQL的時候,ifnull函式是不存在的,但是,可以使用if(col is not null, col, default_value)來實現ifnull的功能,如果col不為null,返回col的值,否則返回default_value。

那上面的例項就可以改成如下:

if(
sum(CASE WHEN flag = '全量' THEN g.pv END) is not null,
sum(CASE WHEN flag = '全量' THEN g.pv END),
0) 
AS all_pv

相關推薦

mysqlifnullhiveif函式轉換

先說說,在mysql中,ifnull函式的用法,其表示式如下:IFNULL(expr1,expr2)如果 expr1 不是 NULL,IFNULL() 返回 expr1,否則它返回 expr2。IFNULL()返回一個數字或字串值,取決於它被使用的上下文環境。舉個應用場景,比

mysql unix_timestampfrom_unixtime 時間戳函式

1.unix_timestamp 將時間轉化為時間戳。(date 型別資料轉換成 timestamp 形式整數) 沒傳時間引數則取當前時間的時間戳 mysql> select unix_timestamp(); +------------------+ | unix_

通過sqoop將mysql資料匯入到hive進行計算示例

hive計算示例 先將資料通過sqoop從mysql匯入hive,在hive執行mysql的查詢語句,得到與mysql一樣的執行結果 步驟: mysql資料準備 account賬號表 detail收支資料表 CREATE TABLE

JAVAsuperthis呼叫建構函式

this 和super在建構函式中只能有一個,且都必須是建構函式當中的第一行。 super關鍵字,子類可以通過它呼叫父類的建構函式。 1、當父類的建構函式是無參建構函式時,在子類的建構函式中,就算不寫super()去呼叫父類的建構函式,編譯器不會報錯,因為編譯器

MFCsetimerontimer定時器函式到時間不能觸發執行是因為WM_TIMER訊息的優先順序低

MFC中setimer和ontimer定時器函式到時間不能觸發執行, 因為WM_TIMER訊息的優先順序低,所以會優先處理高級別其他訊息,如 WM_PAINT訊息重複觸發介面的重繪, WM_TIMER無處理的機會。訊息

MySQL設定編碼專案如何統一編碼

資料庫、表、表字段、伺服器程式碼、伺服器檔案、瀏覽器顯示的編碼要統一。 建庫建表時指定編碼: 建立資料庫時指定庫編碼: create database databaseName default character set utf8 collate utf8

SQLCharindexOracle對應的函式Instr

在專案中用到了oracle中 Instr 這個函式,順便仔細的再次學習了一下這個知識。 Oracle中,可以使用 Instr 函式對某個字串進行判斷,判斷其是否含有指定的字元。 其語法為: Instr(string, substring, position, occurrence) 其中 strin

C++數字字符串的轉換

oat 不能 ring1 相關 輸出 displays tof spl 進制轉換 1、字符串數字之間的轉換(1)string --> char * string str("OK"); char * p = str.c_str();(2)char * -->

C++static_castdynamic_cast強制類型轉換

tro 父類 虛函數表 找到 virt 內部 pub 判斷 () 在C++標準中,提供了關於類型層次轉換中的兩個關鍵字static_cast和dynamic_cast。 一、static_cast關鍵字(編譯時類型檢查) 用法:static_cast < type-i

Spark機器學習mlmllib矩陣、向量

int reg index mac matrix 對比 判斷 bsp ive 1:Spark ML與Spark MLLIB區別? Spark MLlib是面向RDD數據抽象的編程工具類庫,現在已經逐漸不再被Spark團隊支持,逐漸轉向Spark ML庫,Spark ML是面

jsonloadjQuery的ready區別

沒有 dom 所有 出現 jquer 方法 點擊 div nload window.onload必須等到頁面內包括圖片的所有元素加載完畢後才能執行。 ------>不能寫多個(如果有多個,只會執行一個) $(document).ready()是DOM結構繪制完畢後

30-python3 bytes string 之間的互相轉換

轉自:http://www.jb51.net/article/105064.htm   password = b'123456' 等價於: pw = '123456' password = pw.encode(encoding='utf-8')      前言

C/C++printfC++cout的輸出格式

一、 Printf 輸出格式   C中格式字串的一般形式為: %[標誌][輸出最小寬度][.精度][長度]型別,其中方括號[]中的項為可選項。各項的意義介紹如下:1.型別型別字元用以表示輸出資料的型別,其格式符和意義下表所示: 表示輸出型別的格式字元   格式字元意義 a          

linux系統MySQL的安裝hive叢集安裝詳細步驟及講解

此安裝步驟是多年經驗總結,一定要嚴格按照步驟進行,一定要細心!!! MySQL的安裝是重中之重!!!出現錯誤很難修改!!! 另外安裝命令不要複製!!!自己手敲!!!不要複製!!!複製可能導致出錯!!! 空格,小數點要格外注意,都不能少 一、先刪除Linux自帶的MySQL 1、找到

javamap表單字串相互轉換

一、需求 serialnum=123456&data=357c0a04f&enable=true&key=b5b806d0dc9 帶有&分割的字串,轉化為map的key、value型別儲存,反之也行。 二、程式碼 import java.util.

jslistmap新增元素

今天做東西時需要用到在map中新增一個元素,結果以為使用push就可以了,試了很久都沒成功。後了找資料才發現是我誤解push用法了。 list中新增一個元素,可以使用push在末尾追加 js程式碼 var arr = ['a','b','c']; arr.push('d'); consol

對於QtQStringchar*之間的互相轉換問題(系列二)

對於Qt,雖說對C++全部相容,但是一旦涉及到和介面的資料的互動操作,難免涉及到char*和QString的轉換問題,轉換的過程很簡單,這裡總結了一下網上提供的最簡單的一個方法: 從char*轉成QString型別: 使用fromLocal8Bit方法進行轉換: char * te

AXIS2OMElementJava物件之間的轉換 分享

最近在使用AXIS2部署Web Service,關於如果使用axis2部署Web Service的方法不想在這裡多說,網站有很多相關的文章,這裡只想談談AXIOM物件與Java中的物件的轉換方法。 關於AXIOM的介紹,下面這個片段已經說得很明白了: AXIOM AXIs 物件模型 (AXIOM) 是一

@param spring@parammybatis@param使用區別

spring中@param和mybatis中@param使用區別 置頂 2015年03月14日 11:51:09 閱讀數:55176 spring中@param /** * 查詢指定使用者和

linux指令碼括號括號的區別

在 Bash 4.3.11 測試: POSIX vs Bash 擴充套件: [ 是 POSIX[[ is 一個 Bash 擴充套件常規命令 vs 魔法 [ 只是一個有著奇怪名字的常規命令。 ] is just an argument of [ that prevents further argumen