永洪社区

标题: SQL数据分析:数据整理-数据转换(1) [打印本页]

作者: puffs    时间: 2024-6-21 13:54
标题: SQL数据分析:数据整理-数据转换(1)
一般在账号权限管理比较严格的公司中数据分析师是没有数据库操作权限的,只有查询权限,因此本篇主要以查询统计例子为主
如果你需要对数据进行转换、补充或者重新分类就可以使用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;


文章来源:数据分析之渔















欢迎光临 永洪社区 (http://club.yonghongtech.com/) Powered by Discuz! X3.4