找文章 / 找答案
精选问答 更多内容

[SQL独家资料] SQL数据分析:数据整理-数据转换(1)

puffs 显示全部楼层 发表于 2024-6-21 13:54:43 |阅读模式 打印 上一主题 下一主题
一般在账号权限管理比较严格的公司中数据分析师是没有数据库操作权限的,只有查询权限,因此本篇主要以查询统计例子为主
如果你需要对数据进行转换、补充或者重新分类就可以使用CASE语句,(CASE语句格式为:CASE...WHEN...THEN...ELSE...END),以单表查询举例
在retail_sales_dataset表中Gender字段是英文,我们需要把它转换为中文的“男”和“女”,并进行统计

1. 将英文的性别转换为中文的男和女(还可以转换为1和0)
select Gender ,
case when Gender ='Male' then '男'
when Gender ='Female' then '女'
else '未知'
end as '性别' from retail_sales_dataset;


需要统计男女人数,可参考以下方法(group by 分组,order by 排序 desc倒序,不写则默认为升序)

(1) 将1中查询到的结果当作一个新表a再进行查询
select a.性别,count(a.性别)as 客户人数
from (select Gender,
case when Gender ='Male' then '男'
when Gender ='Female' then '女'
else '未知' end as '性别' from retail_sales_dataset)a
group by 1 order by 2 desc;


(2) 使用replace先替换后统计
select replace(replace(Gender,'Female','女'),'Male','男')as性别,
count(*)as 客户人数
from retail_sales_dataset
group by 1 order by 2 desc;


除了数据转换还可以用于数据分类,例如以年龄将客户分类,看看客户主要集中在哪个年龄段,在这之前我们需要先了解一下表中的客户最大年龄和最小年龄分别是多少,可用以下语句

select min(Age)as 最小年龄,max(Age)as 最大年龄
from retail_sales_dataset;


得到客户年龄在18-64之间,大概把客户年龄分为4段,18-29,30-44,45-59,60-64

2.将客户年龄分段
select Age ,
case when Age<=29 then '18-29'
when Age<=44 then '30-44'
when Age<=59 then '45-59'
else '60-64'
end as '客户年龄段'
from retail_sales_dataset;
分段结果如图


3. 统计不同年龄段的客户人数,同样可将2中查询的结果当作一个新表a进行查询统计
select a.客户年龄段,count(a.Age)as 客户人数
from (select Age ,
case when Age<=29 then '18-29'
when Age<=44 then '30-44'
when Age<=59 then '45-59'
else '60-64'
end as '客户年龄段'
from retail_sales_dataset)a
group by 1 order by 2 desc;

如果分类的条件涉及到多个字段就可以使用AND(且)/OR(或)进行连接

例如将产品类别为“Beauty”总金额500及以上的客户归为“美妆优质客户”这个时候需要同时满足两个条件,一个是产品类别为“Beauty”,总金额需要达到500及以上,可以使用AND连接

4.将不同客户按消费品类和消费等级分类
select `Customer ID`,
case  when`Total Amount`>= 800 and `Product Category`='Beauty' then '美妆优质客户'
when `Total Amount`>= 500 and `Product Category`='Clothing' then '服装优质客户'
when `Total Amount`>= 1000 and `Product Category`='Electronics' then '电子产品优质客户'
else '其他' end as '客户类别' from retail_sales_dataset;


5.统计不同消费等级的客户数,将4中分类当作一个新表a进行查询统计
select a.客户类别,count(a.客户类别)
from (select `Customer ID`,
case  when`Total Amount`>= 800 and `Product Category`='Beauty' then '美妆优质客户'
when `Total Amount`>= 500 and `Product Category`='Clothing' then '服装优质客户'
when `Total Amount`>= 1000 and `Product Category`='Electronics' then '电子产品优质客户'
else '其他' end as '客户类别' from retail_sales_dataset)a
group by 1 order by 2 desc;


文章来源:数据分析之渔










回复

使用道具 举报

高级模式
您需要登录后才可以回帖 登录 | 免费注册

  • 官方微信

    欢迎关注永洪服务号!收费为0,价值无限

    扫码关注
  • 新浪微博

    让每位用户轻松挖掘数据价值!

    访问新浪微博
  • 智能客服
50W

会员等你来哦

Copyright   ©2012-2024  北京永洪商智科技有限公司  (京ICP备12050607) 京公网安备110110802011451号 |《永洪社区协议》
返回顶部