一、背景說明
在移動運營商的業(yè)務中稠曼,客戶都有各自的手機號碼刁绒,我們可以把客戶的手機號碼可以根據(jù)其末位數(shù)字的奇偶性進行分類。通過分析奇數(shù)號碼客戶和偶數(shù)號碼客戶每天的消費情況坊罢,可以了解不同類型客戶的消費習慣和趨勢续担,有助于運營商制定更有針對性的營銷策略和優(yōu)化服務。
二活孩、問題描述
現(xiàn)在有一個業(yè)務場景物遇,要求計算每天奇數(shù)號碼客戶和偶數(shù)號碼客戶的消費金額總和。如果某天沒有奇數(shù)或偶數(shù)號碼客戶的消費,顯示為 0询兴,返回結(jié)果表以消費日期升序排序乃沙。本次以梧桐數(shù)據(jù)庫為例進行SQL實現(xiàn)及思路講解。
三诗舰、表結(jié)構(gòu)說明
梧桐數(shù)據(jù)庫消費記錄表建表語句
create table consume_record (
? ? consume_id integer,? ? ? ? -- 客戶id
? ? phone_number varchar(32),? -- 手機號碼
? ? amount integer , -- 消費金額
? ? consume_date date,? ? ? ? ? -- 消費日期
? ? primary key (consume_id)
);
四警儒、表數(shù)據(jù)插入
通過insert語句向梧桐數(shù)據(jù)庫插入樣例數(shù)據(jù)
insert into consume_record values(1, '13800138000', 100, '2023-01-01');
insert into consume_record values(2, '13800138001', 150, '2023-01-01');
insert into consume_record values(3, '13800138002', 200, '2023-01-01');
insert into consume_record values(4, '13800138003', 250, '2023-01-01');
insert into consume_record values(5, '13800138004', 300, '2023-01-01');
insert into consume_record values(6, '13800138005', 350, '2023-01-01');
insert into consume_record values(7, '13800138006', 400, '2023-01-02');
insert into consume_record values(8, '13800138007', 450, '2023-01-02');
insert into consume_record values(9, '13800138008', 500, '2023-01-02');
insert into consume_record values(10, '13800138009', 550, '2023-01-02');
insert into consume_record values(11, '13800138010', 600, '2023-01-02');
insert into consume_record values(12, '13800138011', 650, '2023-01-02');
insert into consume_record values(13, '13800138012', 700, '2023-01-03');
五、sql實現(xiàn)思路分解
1眶根、提取手機號碼的末位數(shù)字
2蜀铲、判斷手機號碼的末位數(shù)字的奇偶性
3、根據(jù)奇偶型計算消費總額
4汛闸、按消費日期升序排列蝙茶,顯示了每天奇數(shù)號碼客戶和偶數(shù)號碼客戶的消費總額。如果某天沒有奇數(shù)或偶數(shù)號碼客戶的消費诸老,顯示為 0。
六钳恕、sql代碼實現(xiàn)
select
? ? consume_date,? -- 消費日期
? ? -- 提取手機號碼的最后一個字符
? ? -- 通過mod函數(shù)判斷奇偶性别伏,余數(shù)為 0,則表示偶數(shù)忧额;余數(shù)為 1厘肮,則表示奇數(shù)
? ? sum(case when mod(substr(phone_number, -1) , 2) = 0 then amount else 0 end) as even_amount, -- 計算末位數(shù)字為偶數(shù)的客戶的消費總額
? ? sum(case when mod(substr(phone_number, -1) , 2) = 1 then amount else 0 end) as odd_amount? -- 計算末位數(shù)字為奇數(shù)的客戶的消費總額
from
? ? consume_record? -- 從消費記錄表中讀取數(shù)據(jù)
group by
? ? consume_date? -- 按照消費日期分組
order by
? ? consume_date asc; -- 按照消費日期升序排列
author:chenhui