以梧桐数据库为例分析奇数号码客户和偶数号码客户每天消费情况的SQL实现 ...

打印 上一主题 下一主题

主题 1730|帖子 1730|积分 5190

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、背景说明

在移动运营商的业务中,客户都有各自的手机号码,我们可以把客户的手机号码可以根据其末位数字的奇偶性举行分类。通过分析奇数号码客户和偶数号码客户每天的消费情况,可以相识差别范例客户的消费习惯和趋势,有助于运营商制定更有针对性的营销计谋和优化服务。
二、问题描述

如今有一个业务场景,要求计算每天奇数号码客户和偶数号码客户的消费金额总和。如果某天没有奇数或偶数号码客户的消费,显示为 0,返回结果表以消费日期升序排序。 本次以梧桐数据库为例举行SQL实现及思绪讲解。
三、表结构说明

梧桐数据库消费记录表建表语句
  1. create table consume_record (
  2.     consume_id integer,         -- 客户id
  3.     phone_number varchar(32),   -- 手机号码
  4.     amount integer ,                        -- 消费金额
  5.     consume_date date,          -- 消费日期
  6.     primary key (consume_id)
  7. );
复制代码
四、表数据插入

通过insert语句向梧桐数据库插入样例数据
  1. insert into consume_record values(1, '13800138000', 100, '2023-01-01');
  2. insert into consume_record values(2, '13800138001', 150, '2023-01-01');
  3. insert into consume_record values(3, '13800138002', 200, '2023-01-01');
  4. insert into consume_record values(4, '13800138003', 250, '2023-01-01');
  5. insert into consume_record values(5, '13800138004', 300, '2023-01-01');
  6. insert into consume_record values(6, '13800138005', 350, '2023-01-01');
  7. insert into consume_record values(7, '13800138006', 400, '2023-01-02');
  8. insert into consume_record values(8, '13800138007', 450, '2023-01-02');
  9. insert into consume_record values(9, '13800138008', 500, '2023-01-02');
  10. insert into consume_record values(10, '13800138009', 550, '2023-01-02');
  11. insert into consume_record values(11, '13800138010', 600, '2023-01-02');
  12. insert into consume_record values(12, '13800138011', 650, '2023-01-02');
  13. insert into consume_record values(13, '13800138012', 700, '2023-01-03');
复制代码
五、sql实现思绪分解

1、提取手机号码的末位数字
2、判定手机号码的末位数字的奇偶性
3、根据奇偶型计算消费总额
4、按消费日期升序排列,显示了每天奇数号码客户和偶数号码客户的消费总额。如果某天没有奇数或偶数号码客户的消费,显示为 0。
六、sql代码实现

  1. select
  2.     consume_date,  -- 消费日期
  3.     -- 提取手机号码的最后一个字符
  4.     -- 通过mod函数判断奇偶性,余数为 0,则表示偶数;余数为 1,则表示奇数
  5.     sum(case when mod(substr(phone_number, -1) , 2) = 0 then amount else 0 end) as even_amount, -- 计算末位数字为偶数的客户的消费总额
  6.     sum(case when mod(substr(phone_number, -1) , 2) = 1 then amount else 0 end) as odd_amount  -- 计算末位数字为奇数的客户的消费总额
  7. from
  8.     consume_record  -- 从消费记录表中读取数据
  9. group by
  10.     consume_date  -- 按照消费日期分组
  11. order by
  12.     consume_date asc; -- 按照消费日期升序排列
复制代码
七、sql实现结果

consume_dateeven_amountodd_amount2023-01-016007502023-01-02150016502023-01-037000
author:chenhui

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表