请选择 进入手机版 | 继续访问电脑版
楼主: 我是小趴菜
302 0

[数据挖掘新闻] mysql学习33-- 逻辑函数 [推广有奖]

  • 0关注
  • 4粉丝

教授

35%

还不是VIP/贵宾

-

威望
0
论坛币
29645 个
通用积分
380.5350
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
7150 点
帖子
670
精华
0
在线时间
37 小时
注册时间
2022-8-30
最后登录
2023-4-4

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

-- 41 逻辑函数

-- if函数:查询每位员工的工资级别:3000及以上为高,1500-3000为中,1500及以下为低

SELECT ename,sal,if (sal >=3000,"高",if( sal>1500,"中","低")) as 工资级别

FROM EMP;

## 练习 查询每位员工的实发工资(基本工资+提成,没有提成计为0)(用if函数)

SELECT ename,sal,comm,if (comm,sal +comm,sal +0) as 实发工资

FROM EMP;

SELECT ename,sal,comm,if (comm is null,sal +0,sal+comm) as 实发工资

FROM EMP;


-- ifnull函数:查询每位员工的实发工资(基本工资+提成,没有提成计为0):ename,comm,sal,实发工资

SELECT ename,comm,sal,ifnull (comm, 0) +sal as 实发工资

FROM EMP;


-- case when函数 (又称逻辑表达式) case when ...then... else ... end

#工资等级排序,利用字母排序

select ename,sal,

case when sal >= 3000 then "A高"

                 when sal >1500 and sal <3000 then "B中"

else "C低"

end as 工资级别

from emp

order by 工资级别 ASC;



-- 练习(德邦物流):计算创建日期在0501-0531期间客户的单量分布情况:单量区间、客户数

-- 课后作业(德邦物流):计算创建日期在20200501-20200531期间客户的单量分布情况:单量区间、客户数

#单量区间分为四档: '0-5','6-10','11-20' '20以上'

create database wuliu;

use wuliu;

create table 揽收表(

运单号 char(7) primary key,

客户id char(5),

创建日期 date

);

insert into 揽收表 values

('PNO0001','CC001','2020-05-01'),

('PNO0002','CC002','2020-05-01'),

('PNO0003','CC002','2020-05-02'),

('PNO0004','CC003','2020-05-01'),

('PNO0005','CC003','2020-05-02'),

('PNO0006','CC003','2020-05-03'),

('PNO0007','CC004','2020-05-01'),

('PNO0008','CC004','2020-05-01'),

('PNO0009','CC004','2020-05-02'),

('PNO0010','CC004','2020-05-03'),

('PNO0011','CC004','2020-05-04'),

('PNO0012','CC005','2020-05-01'),

('PNO0013','CC005','2020-05-02'),

('PNO0014','CC005','2020-05-02'),

('PNO0015','CC005','2020-05-03'),

('PNO0016','CC005','2020-05-04'),

('PNO0017','CC005','2020-05-05'),

('PNO0018','CC006','2020-05-03'),

('PNO0019','CC006','2020-05-06'),

('PNO0020','CC006','2020-05-07'),

('PNO0021','CC006','2020-05-08'),

('PNO0022','CC006','2020-05-10'),

('PNO0023','CC006','2020-05-11'),

('PNO0024','CC006','2020-05-12'),

('PNO0025','CC006','2020-05-13'),

('PNO0026','CC006','2020-05-15'),

('PNO0027','CC006','2020-05-18'),

('PNO0028','CC006','2020-05-22'),

('PNO0029','CC006','2020-05-25'),

('PNO0030','CC006','2020-06-10');


#问题1,计算不同单量区间的客户数

#思路1,分步计算

#第1步

select 客户id,count(distinct 运单号) as 下单次数,

case when count(distinct 运单号)<=5 then '0-5'

when count(distinct 运单号)<=10 then '6-10'

when count(distinct 运单号)<=20 then '11-20'

         else '20以上' end as 单量区间 from 揽收表

where month(创建日期)=5

group by 客户id;

#第2步

select 单量区间,count(客户id) as 客户数

from (select 客户id,count(distinct 运单号) as 下单次数,

case when count(distinct 运单号)<=5 then '0-5'

when count(distinct 运单号)<=10 then '6-10'

when count(distinct 运单号)<=20 then '11-20'

         else '20以上' end as 单量区间

from 揽收表

where month(创建日期)=5 group by 客户id)

as t

group by 单量区间;


#思路2,两步合一

select 单量区间,count(客户id) as 客户数

from

(select 客户id,count(distinct 运单号) as 下单次数,

case when count(distinct 运单号)<=5 then '0-5'

when count(distinct 运单号)<=10 then '6-10'

when count(distinct 运单号)<=20 then '11-20'

         else '20以上' end as 单量区间 from 揽收表

where month(创建日期)=5 group by 客户id)

as t

group by 单量区间;


#问题2,计算不同单量区间的客户数和占比

select 单量区间,count(客户id) 客户数,count(客户id)/(select count(distinct 客户id) from 揽收表) 占比

from

(select 客户id,

case when count(*) <=5 then '0-5'

when count(*) <=10 then '6-10'

when count(*) <=20 then '11-20'

else '20以上'

end as 单量区间

from 揽收表

where month(创建日期)=5 group by 客户id)

as t1

group by 单量区间;



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MySQL 逻辑函数 sql Select Elect

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-28 19:47