Hive 練習 簡單任務處理

2021-09-07 19:05:23 字數 3236 閱讀 4651

1、2023年4月份的使用者數、訂單量、銷量、gmv (不侷限與這些統計量,你也可以自己想一些)

-- -- -- 2023年4月份的使用者數量

select

count(a.user_id) as user_nums

from

( select

user_id

from

where

dt >= '2018-04-01'

and sale_ord_dt <= '2018-04-30'

and sale_ord_dt >= '2018-04-01'

group by

user_id

) a;

-- 2023年4月份的訂單量

select

count(a.sale_ord_id) as sale_nums

from

( select

sale_ord_id

from

where

dt >= '2018-04-01'

and sale_ord_dt <= '2018-04-30'

and sale_ord_dt >= '2018-04-01'

group by

sale_ord_id

) a;

-- -- 2023年4月份的銷量

select

sum(coalesce(sale_qtty, 0)) as xiaoliang

from

where

dt >= '2018-04-01'

and sale_ord_dt <= '2018-04-30'

and sale_ord_dt >= '2018-04-01';

-- -- -- 2023年4月份的銷售額gmv

-- user_payable_pay_amount 使用者應付金額

select

sum(user_payable_pay_amount) as xiaoshoujine

from

where

dt >= '2018-04-01'

and sale_ord_dt <= '2018-04-30'

and sale_ord_dt >= '2018-04-01';

ps:

2、上述這些變化量相對3月份的變化

3、計算2023年4月1號的新使用者數量(之前半年未購買的使用者為新使用者)

-- 計算2023年4月1號的新使用者數量(之前半年未購買的使用者為新使用者)

-- 首先找出4月1號的使用者的***,然後統計半年內有過購買記錄的使用者yyy。

-- select distinct user_id as *** from gdm_m04_ord_det_sum where dt>='2018-04-01' and sale_ord_dt='2018-04-01';

-- select distinct user_id as yyy from gdm_m04_ord_det_sum where dt>='2017-10-01' and sale_ord_dt<='2018-03-31' and sale_ord_dt>='2017-10-01';

-- 用***-yyy,然後count()計算數量;

-- 兩種方法,一種用not in ,一種用not exists

-- not in 方法

select distinct user_id from gdm_m04_ord_det_sum

where user_id not in (select distinct user_id from gdm_m04_ord_det_sum where dt>='2017-10-01' and sale_ord_dt<='2018-03-31' and sale_ord_dt>='2017-10-01');

-- not exists 方法

select distinct user_id from gdm_m04_ord_det_sum where dt>='2018-04-01' and sale_ord_dt='2018-04-01' where not exists (select distinct user_id from gdm_m04_ord_det_sum where dt>='2017-10-01' and sale_ord_dt<='2018-03-31' and sale_ord_dt>='2017-10-01' where gdm_m04_ord_det_sum.user_id=gdm_m04_ord_det_sum.user_id);

-- 另一種 left outer join 這樣效率更高 語法有問題??

select distinct user_id from gdm_m04_ord_det_sum where dt>='2018-04-01' and sale_ord_dt='2018-04-01' a left outer join (select distinct user_id from gdm_m04_ord_det_sum where dt>='2017-10-01' and sale_ord_dt<='2018-03-31' and sale_ord_dt>='2017-10-01' b) on a.user_id=b.user_id where b.user_id is null;

正確方法:

select

count(a.id1) as user_new_nums

from

( select distinct

user_id as id1

from

where

dt >= '2018-04-01'

and sale_ord_dt = '2018-04-01'

) aleft outer join

( select distinct

user_id as id2

from

where

dt >= '2017-10-01'

and sale_ord_dt <= '2018-03-31'

and sale_ord_dt >= '2017-10-01'

) bon a.id1 = b.id2

where

b.id2 is null;

C 簡單任務池

今天編寫乙個非同步通訊框架的,非同步派發任務,單路併發,與直接invoke相比的好處是可以使任務的執行代價根據時間均勻化,請看 public class servicetask private action action public void execute public class servic...

FreeRTOS簡單任務排程實現

ifndef rtos h define rtos h include freertos.h include task.h define pex rtos start rtos start void rtos start void void freertos task1 void pvparamet...

Python系列之簡單任務框架

近期由於興趣選擇了python用來開發一款輔助工具,當多工的時候需要順序的執行,方便的動態載入或移除不需要的任務。這不是我第一次接觸指令碼類語言,所以對python上手比較容易。我選擇了pyqt作為介面工具,後台部分需要方便的修改,暫時沒有尋找適合的,由於處於邊學邊用的階段,如果不對,還請指正,謝謝...