case when用法_CASE … WHEN和cast类型转换(日志案例分析应用)

先补充两个知识点:CASE … WHEN和CAST类型转换

CASE … WHEN…的用法

创建数据库

66977322d9181db8d8a6c65c26b12c8f.png

创建员工表

create table emp(

empno int comment '员工编号',

ename string comment '员工姓名',

job string comment '员工职位',

mgr int comment '领导编号',

hiredate string comment '入职时间',

sal double comment '薪资',

comm double comment '奖金',

deptno int comment '部门编号'

)row format delimited fields terminated by '';

9c06dcce9010403b5beeb7316906ec57.png

将数据上传

aed0842c2a5817715771995ba52ba093.png

导入数据

load data local inpath '/data/test/emp.txt' into table emp;

ddbbfd51c0c1ba05a9dd2ed03c2bf5b8.png

查看数据

ac09580add043c992ab31cd77ee90909.png

其中comm有很多null值

select comm from emp;

69dd759675c9ab65b44738ad3fce7074.png

那怎么不让comm这列显示为Null呢?

就可以使用case when,语句

select empno,

case

when comm is NULL then sal+0

else sal+comm

end

from emp;

8d486df9fb9c05a616e1c2c4d416177f.png

可以加别名,进行多层判断。语句

select empno,

case

when sal< 1000 then 'low'

when sal >=1000 and sal < 3000 then 'middle'

when sal >=3000 and sal < 5000 then 'high'

else 'very high'

end

from emp;

f1f79501121747d0186f594f21c4097a.png

cast类型转换

查看下表结构

fbdf8721f7076455b7675f58f03d7991.png

我们将double类型转换为string类型

语句

create table cast_table as select empno,ename ,job ,cast(sal as string) new_sal from emp;

62a9331a8d2567ca76eaeeea2d2a89f3.png

查看表结构

d10dbc3de4bdf3fd6eaa3954c6990885.png

日志案例需求分析:

指标:

(1)日期:最后统计分析的时候根据日期进行分组,可以建立分区表

(2)PV:count(url)

(3)UV: count(distinct guid)

(4)登录人数:user_id 有值,可以登录

(5)游客人数:user_id 无值,非登录人员

(6)平均访问时长:每个用户登录页面之后都会产生一个session_id,统计每个session会话平均的停留时间。求到访问时长:进入页面第一条时间戳,最后离开页面的最后一条时间戳。平均访问时长:按照session_id进行分组,求到平均访问时长。

(7)二跳率:一个用户在一个session会话中,点击的页面大于等于2的次数就是二跳率。求访问页面超过2的用户,统计PV大于等于2的用户再除以总的人数。

(8)独立ip:统计ip去重

开始将数据导入到Hive中

创建数据库

Create database track_log_ip;

dc88e3e3ac08b1971b3548912b1dcba3.png

使用数据库

fabd6d4e3001da27c5745e8f7981b140.png

创建表

create table log_ip_source(

id string,

url string,

referer string,

keyword string,

type string,

guid string,

pageId string,

moduleId string,

linkId string,

attachedInfo string,

sessionId string,

trackerU string,

trackerType string,

ip string,

trackerSrc string,

cookie string,

orderCode string,

trackTime string,

endUserId string,

firstLink string,

sessionViewNo string,

productId string,

curMerchantId string,

provinceId string,

cityId string,

fee string,

edmActivity string,

edmEmail string,

edmJobId string,

ieVersion string,

platform string,

internalKeyword string,

resultSum string,

currentPage string,

linkPosition string,

buttonPosition string

)partitioned by(date string)

row format delimited fields terminated by '';

7488bb9bce2a8af3c8eb5b0326115d9e.png

导入数据

load data local inpath '/data/test/data1' into table log_ip_source partition(date='2015082818');

b099d5317e2dfea587ceaac991d363b7.png

数据清洗

会话信息的关键指标:

trackerU:访问渠道:通过什么方式进入到网站:收藏夹、手输网址、论坛、博客等

landing_url着陆页:用户进入网站的第一个页面,需要获取第一条记录,分析同一个session会话中的第一个页面。

Landing_url_ref着陆页之前的页面:需要获取第一条记录

创建会话信息表

create table session_info(

session_id string ,

guid string ,

trackerU string ,

landing_url string ,

landing_url_ref string ,

user_id string ,

pv string ,

stay_time string ,

min_trackTime string ,

ip string ,

provinceId string

)partitioned by (date string)

ROW FORMAT DELIMITED FIELDS TERMINATED BY '' ;

0c3ac34881010ce8e007e9bce8d8267b.png

加载数据

针对每个会话进行一个group by sessionId

由于sessionid分组之后会得到多条记录 ,那么就是对于每个session里面统计pv

创建临时表

create table session_tmp as

select

sessionId session_id,

max(guid) guid,

max(endUserId) user_id,

count(distinct url) pv,

(unix_timestamp(max(trackTime)) - unix_timestamp(min(trackTime)) ) stay_time,

min(trackTime) min_trackTime,

max(ip) ip,

max(provinceId) provinceId

from log_ip_source where date='2015082818'

group by sessionId;

f38bea43814e2318cea0c5e010b92050.png

这三个字段

trackerU,landing_url,landing_url_ref

(1)从源表中获取每一条记录的trackerU,landing_url,landing_url_ref

(2)从源表中获取每一条记录的时间

(3)然后进行最小时间与源表当中最小时间的join,获取到trackerU,landing_url,landing_url_ref

创建第二张临时表

create table track_tmp as

select

sessionId session_id,

trackTime trackTime,

url landing_url,

referer landing_url_ref,

trackerU trackerU

from log_ip_source

where date='2015082818';

c73063f6c98aa893eb982d2a3cce0e7e.png

Join连接

insert overwrite table session_info partition(date='2015082818')

select

a.session_id session_id,

max(a.guid) guid,

max(b.trackerU) trackerU,

max(b.landing_url) landing_url,

max(b.landing_url_ref) landing_url_ref,

max(a.user_id) user_id,

max(a.pv) pv,

max(a.stay_time) stay_time,

max(a.min_trackTime) min_trackTime,

max(a.ip) ip,

max(a.provinceId) provinceId

from session_tmp a join track_tmp b on

a.session_id = b.session_id and a.min_trackTime = b.trackTime

group by a.session_id;

b99643efc9f6ce7138f8ff2804adaf36.png
d4eb041873b52dd4324d5c937907c0be.png

数据分析

语句

create table result as

select

date date,

sum(pv) pv,

count(distinct guid) guid,

count( distinct case when user_id is not null then guid else null end ) login_user,

count( distinct case when user_id is null then guid else null end ) visitor,

avg(stay_time) avg_time,

(count(case when pv>2 then session_id else null end)/count(session_id) ) session_jump,

count(distinct ip) ip

from session_info where date='2015082818'

group by date;

92eddca234249d0f3ebb72d3d2013c5e.png

查看下结果

39f86ebd3cacc4b9d5b2b847c14a144a.png

这个地方有问题,游客人数为0

1bdc7ceb5ae5c04d13803edb583e52d9.png

重新写语句

create table qw as

select

date date,

sum(pv) PV,

count(distinct guid) UV,

count(distinct case when length(user_id)!=0 then guid else null end) login_user,

count(distinct case when length(user_id)=0 then guid else null end) visitor,

avg(stay_time) avg_time,

(count(case when pv>=2 then session_id else null end)/count(session_id)) second_jump,

count(distinct ip) IP

from session_info

where date='2015082818'

group by date;

e75cb211036b989a859018bd7c0d1d5e.png

查看结果

19404c735d201f9a076d0bb7236f7621.png
weixin_39589394
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLServer函数case when,ROW_NUMBER() OVER(),CAST,CONVERT,LEFT,RIGHT
zhengzaifeidelushang的博客
09-23 655
SQLServer函数case when,CAST,CONVERT,DATEADD,DATEPART 一、case when函数 case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。 简单case函数 CASE name when 'yf' then 'love' when 'qq' then 'qianqian' when 'lb' then 'liubei' else 'error' END as name 示例: SELECT stuID, CASE name
hive的case when then和cast
hello_java_lcl的博客
08-13 520
记录一个因为本人弱智脑子不清醒导致搞了很长时间的bug:写hivesql的时候,把cast写成了case,还神奇的一直没有发现,在积极百度查报错原因╮(╯▽╰)╭ 这里记录下两个方法的用法,来涨涨记性! cast 用法 CAST(<timestamp/date> AS <varchar/char/string> [FORMAT <template>]) CAST(<varchar/char/string> AS <tim.
cast ,case when的用法
macfei的博客
12-09 1267
1.case when的用法 需求:将brand_type对应的数字翻译成品牌 select case when brand_type=1 then '荣威' when brand_type=2 then '名爵' when brand_type=4 then 'R标' else brand_type end as attr1 from tb 2.手机号加密 //第一
sqlserver中,case when then 不同类型数值的转换(case 字段 when int then varchar end)
csdnfeiguo的博客
05-19 4527
数据库:sqlserver; 错误案例:(status为int类型)select *,(case status when 0 then '正常' when 1 then '删除' else status end) as status from tb; 错误信息:在将 varchar 值 '正常' 转换成数据类型 int 时失败。 原因分析:简单来说,不同类型数值不能转换。按照“数据类型优先级”规则,case表示式中最高优先级的数据类型决定了表达式返回值的数据类型。“数据类型优先级”规则可以在SQL S
sqlserver里,case when和cast函数一起使用
bpqdwo的博客
04-16 2172
sqlserver里,查询order_id,amount,如果Transaction_Amount< Order_Amount 就返回 Order_Amount,否则就返回Transaction_Amount,并且除以一百保留两位小数的sql select order_id, case when Transaction_Amount < Order_Amount then cas...
CASE WHEN 转换NULL类型的问题
cserw3c的专栏
10-16 626
         将DECIMAL标志类型转换页面显示形式   select CASE WHEN FLAG IS NULL THEN '无' ELSE to_char(FLAG ) END from TABLE_TEST ;           其中如果FLAG字段不用TO_CHAR的话会报错。   ...
case-when语法---将行转换为列
XTY00的博客
11-15 5809
CASE WHEN的用法及总结 一、已知数据按照另外一种方式进行分组,分析 二、用一个SQL语句完成不同条件的分组 三、在Check中使用Case函数 四、根据条件有选择的UPDATE 五、两个表数据是否一致的检查 六、在Case函数中使用合计函数 七、小结 Case具有两种格式。简单Case函数和Case搜索函数。 简单Case函数 1 CASE sex 2 WHEN '1'...
mysql on case when,MySQL 的CASE WHEN 语句使用说明
weixin_42593130的博客
03-17 819
mysql数据库中CASE WHEN语句。case when语句,用于计算条件列表并返回多个可能结果表达式之一。CASE 具有两种格式:简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。CASE 搜索函数计算一组布尔表达式以确定结果。两种格式都支持可选的 ELSE 参数。语法简单 CASE 函数:复制代码 代码如下:CASE input_expressionWHEN when_e...
CASE WHEN 基础用法详解(搬运)
baibai0623的博客
05-25 4303
1.简单CASE WHEN函数: CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' END CASE SCORE WHEN 'B' THEN '良' ELSE '不及格' END CASE SCORE WHEN 'C' THEN '中' ELSE '不及格' END 等同于,使用CASE WHEN条件表达式函数实现: CASE WHEN SCORE = 'A' THEN '优' WHEN SCORE = 'B' THEN '良' WHEN SCORE = 'C'
SQL学习笔记七函数 数字,日期,类型转换,空值处理,case
12-15
在本篇SQL学习笔记中,我们将重点探讨数字函数、日期函数、类型转换以及空值处理,以及CASE语句的使用。 1. **数字函数**: - `ABS()`:返回一个数的绝对值,例如`ABS(-5)`会返回`5`。 - `CEILING()`:将数值向上...
case when 语句 在将 varchar 值 'NULL' 转换成数据类型 int 时失败
RX的博客
01-03 4150
简单的写一下吧,这个坑是写脚本的时候时隔一月再次遇到的坑; 原语句如下: select distinct case when emergency is null then 'NULL' elseemergency end as '紧急程度' from Filteredupgradingplan 乍一看没有问题,但是在运行的时候出错了,因为 case whe...
case....when ...多重判断
weixin_30578677的博客
03-12 1558
CASE...WHEN 进行多重判断 CASE WHEN A IS NOT NULL THEN B WHEN C IS NULL THEN CASE WHEN D IS NOT NULL THEN E ELSE 0 END END contract_amount_total, 转载于:https:...
Distinct,Case When,Left,Right用法
讯达网络科技的博客
04-30 736
Distinct,Case When,Left,Right用法
mysql case 列名 when 和 case when的区别
weixin_30947043的博客
06-05 440
最近写了一个sql,才发现有些情况不能用case 列名 when (case ts.score when ts.score BETWEEN 9 and 10 then '优' when ts.score BETWEEN 8 and 8.9 then '良' when ts.score BETWEEN 7 and 7.9 then '中' else '差' END ) ...
oracle 中sql中的 case when 和 pl/sql中的 case when 有什么区别?
weixin_41870061的博客
08-01 319
sql中的 case when 和 pl/sql中的 case when 有什么区别?
MySQL CASE WHEN 多个判断条件
最新发布
Ellis_li 的博客
07-17 1586
MySQL CASE WHEN 多个判断条件
case when常见高级使用场景
m0_58152036的博客
05-24 5920
在这个查询中,使用 CASE WHEN 表达式根据订单金额将订单分为不同的类型,并在 CASE WHEN 中给出每个类型的名称。2. 嵌套 CASE WHEN:CASE WHEN 表达式可以嵌套在其他 CASE WHEN 表达式内部,形成更复杂的逻辑判断。3. 使用聚合函数: CASE WHEN 表达式可以与聚合函数结合使用,根据条件对聚合结果进行分组或筛选。注意,在 GROUP BY 子句中,再次使用相同的 CASE WHEN 表达式,以确保按订单类型进行正确的分组。(3)用case when求季度。
Java 中的 Switch 都支持 String 了,为什么不支持 long?
04-30 254
我们知道 Java Switch 支持byte、short、int 类型,在 JDK 1.5 时,支持了枚举类型,在 JDK 1.7 时,又支持String类型。那么它为什么就不能支持 long 类型呢,明明它跟 byte、short、int 一样都是数值型,它又是咋支持 String 类型的呢? 1 结论 不卖关子,先说结论: switch 底层是使用 int 型 来进行判断的,即使是枚举、String类型,最终也是转变成 int 型。由于 long 型表示范围大于 int 型,因此不支持 l
sql case when 中添加多个条件
热门推荐
qq_37962402的博客
07-30 1万+
概述 想必大家已经在工作中很常用到case when 了,这也是必备的。SQL可以给我们带来很多的便利。 问题 简单示例 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' EN CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' 业务需要面对一个问题,case when 时,不光sex = ‘2’ 还要判断name ...
mysql cast和 case when 怎么一起使用
04-19
在MySQL中,可以使用CASE WHEN语句来实现条件判断,而CAST函数可以将数据类型转换成另外一种类型。如果要将条件判断的结果转换成特定的数据类型,可以将CASE WHEN语句嵌套在CAST函数中使用,例如: SELECT CAST...
写文章

热门文章

  • 雷电3菊链功能_雷电4、USB4、全功能Type-C有什么区别? 42032
  • 手机12306买卧铺下铺技巧_12306如何选择上下铺 选择上下铺小技巧 16784
  • zynq 和fpga区别_3分钟快速认识Zynq开发 13339
  • python计算棋盘放米的故事_在棋盘上64个格子里放大米粒的故事 10784
  • 宇视设备搜索工具_宇视400常见问题合集 9765

最新文章

  • 怎么在esxi的服务器文件系统,如何使用Windows2008r2为vSphere配置nfs服务器
  • 串口服务器网页显示iis,生命在等待中延续:汉枫Wi-Fi串口服务器HF2211S应用案例...
  • 华为服务器密码忘记了怎么修改密码,更改云服务器登录密码忘记了怎么办
2021年137篇
2020年231篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家咸阳商场美陈装饰公司湖南玻璃钢金属雕塑厂家马村玻璃钢雕塑厂家南京商场中庭美陈上海佛像玻璃钢雕塑汕尾玻璃钢卡通雕塑加工厂家温州玻璃钢雕塑摆件工业玻璃钢花盆设计厂家青海城市标志玻璃钢雕塑西宁仿真玻璃钢雕塑安装杭州特色玻璃钢雕塑销售厂家石家庄正规玻璃钢雕塑服务介绍濮阳不锈钢人物玻璃钢雕塑厂家阿坝玻璃钢卡通雕塑定西玻璃钢景观雕塑天津玻璃钢香蕉雕塑临沂玻璃钢雕塑加工厂家高碑店玻璃钢花盆花器江苏镜面玻璃钢雕塑性价比出众吉林景观玻璃钢雕塑定制渝中玻璃钢雕塑成品玻璃钢花盆有哪些山西步行街玻璃钢雕塑价位九江创意玻璃钢雕塑生产厂家玻璃钢雕塑粘结元田玻璃钢雕塑野猪玻璃钢雕塑四川大型商场美陈哪里有公仔形象定制玻璃钢雕塑人物动物新余桃子玻璃钢雕塑厂香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化