1. 程式人生 > >資料庫學習(四)with as (補充 nvl 和 count 函式)

資料庫學習(四)with as (補充 nvl 和 count 函式)

  with as 的專業解釋我這就不詳細說明了,我這就梳理下我自己的實踐應用,就是根據某個條件查詢出結果集放在一個臨時表裡面,可以建立多個臨時表,然後再從這些臨時表中查詢出要的資料。

  參考資料:https://www.cnblogs.com/Niko12230/p/5945133.html 

         http://www.cnblogs.com/CareySon/archive/2011/12/12/2284740.html

查詢語句:

--開店數
WITH temp_reg AS
          (SELECT a.app_muid
                 ,a.
user_id ,a.created_time FROM dataayn_v1.dci_user_action_register a inner join dataayn_v1.dci_stores b on a.user_id = b.user_id WHERE b.open_time < to_date('2018-10-01','yyyy-mm-dd') AND b.open_time >= to_date('2018-09-01'
,'yyyy-mm-dd')), temp_mapp AS (SELECT b.app_muid ,b.hannels ,b.advertiser_id FROM dataayn_v1.dci_appmuid_hannels_mapp b WHERE b.created_time = (SELECT MIN(created_time) FROM dataayn_v1.dci_appmuid_hannels_mapp d
WHERE d.app_muid = b.app_muid)) SELECT b.hannels ,b.advertiser_id ,nvl(COUNT(1),0) 開店數 FROM temp_reg a INNER JOIN temp_mapp b ON a.app_muid = b.app_muid GROUP BY b.hannels ,b.advertiser_id ;

 

** nvl() 函式,空值判斷函式

  NVL(表示式1,表示式2):如果表示式1為空值,NVL返回值為表示式2的值,否則返回表示式1的值。

  NVL2(表示式1,表示式2,表示式3):如果表示式1為空,返回值為表示式3的值。如果表示式1不為空,返回值為表示式2的值。

  參考資料:https://www.cnblogs.com/feifeicui/p/9337186.html

** count()函式:

  count(*)包括了所有的列,相當於行數,在統計結果的時候,不會忽略列值為NULL  

  count(1)包括了所有列,用1代表程式碼行,在統計結果的時候,不會忽略列值為NULL  

  count(列名)只包括列名那一列,在統計結果的時候,會忽略列值為空(這裡的空不是隻空字串或者0,而是表示null)的計數,即某個欄位值為NULL時,不統計