SQL语法学习(3)——GROUP BY

SQL语法学习(1)
SQL语法学习(2)
继续学习GROUP BY

GROUP BY 有一点类似于Excel的数据透视表

先来看看数据:
在这里插入图片描述

按照不同制造商分组

SELECT * FROM new_schema20200309.new_table
GROUP BY Manufacturer;

因为进行了分组,每个制造商只返回一个结果,如下:
在这里插入图片描述在部分数据库中可能报错,应该换为:

SELECT Manufacturer FROM new_schema20200309.new_table
GROUP BY Manufacturer

结果如下:
在这里插入图片描述

不同制造商下各个产品的数量

SELECT Manufacturer,COUNT(Product) FROM new_schema20200309.new_table
GROUP BY Manufacturer;

结果如下:

在这里插入图片描述

等价方法:COUNT(Product)=COUNT(1)=COUNT(*)

SELECT Manufacturer,COUNT(Product),COUNT(1),COUNT(*) FROM new_schema20200309.new_table
GROUP BY Manufacturer

在这里插入图片描述

DISTINCT去重:假设相同的一个产品会有不同的制造商来生产,这个时候我们要获取不同类别下产品的数量怎么办?

SELECT Category,COUNT(Product),COUNT(DISTINCT Manufacturer) FROM new_schema20200309.new_table
GROUP BY Category

在这里插入图片描述

多层分组:不同类别下不同制造商的产品数量

SELECT Category,Manufacturer,COUNT(Product) FROM new_schema20200309.new_table
GROUP BY Category,Manufacturer

在这里插入图片描述

GROUP BY的筛选:HAVING

类似于WHERE,但是HAVING针对GROUP BY

筛选出制造商中产品数量少于100的制造商

SELECT Manufacturer,COUNT(Product) FROM new_schema20200309.new_table
GROUP BY Manufacturer
HAVING COUNT(Product) <= 100

在这里插入图片描述

进阶(1)

SELECT city,count(1) FROM data.dataanalyst
WHERE industryField LIKE "%电子商务%"
GROUP BY city
HAVING COUNT(positionID) >= 50

解释:展示“电子商务”岗位数大于50个的城市情况
示例结果:

city count(1)
上海 166
北京 150
深圳 98
杭州 75

上面语句用嵌套函数更改:

SELECT city,count(1) FROM data.dataanalyst
GROUP BY city
HAVING COUNT(if(industryField LIKE "%电子商务%",1,null) >= 50

这里要理解if中1和null
1:返回值,表示if条件成立返回1。这里的1换为2,3,4,甚至100都不影响计算结果,因为是对1出现的次数进行COUNT
null:表示if条件成立返回空值null,这里将不计数

进阶(2)

SELECT 
city,
count(1),
COUNT(if(industryField LIKE "%电子商务%",1,null),
COUNT(if(industryField LIKE "%电子商务%",1,null)/count(1)
FROM data.dataanalyst
GROUP BY city

解释:展示各城市中岗位的总数和“电子商务”岗位数情况,可以依据此计算电子商务的岗位比例
示例结果:

city count(1) COUNT(if(industryField LIKE “%电子商务%” COUNT(if(industryField LIKE “%电子商务%”
上海 166 80 0.48
北京 150 78 0.52
深圳 98 40 0.40
杭州 75 36 0.48

AS别名化

SELECT 
city,
count(1) AS total,
COUNT(if(industryField LIKE "%电子商务%",1,null) AS emarket,
COUNT(if(industryField LIKE "%电子商务%",1,null)/count(1)
FROM data.dataanalyst
GROUP BY city
HAVING emarket > 30  #筛选出电商数大于30
ORDER BY emarket  #按照电商数进行降序

解释:展示各城市中岗位的总数和“电子商务”岗位数情况,可以依据此计算电子商务的岗位比例
示例结果:

city total emarket COUNT(if(industryField LIKE “%电子商务%”
上海 166 80 0.48
北京 150 78 0.52
深圳 98 40 0.40
杭州 75 36 0.48
发布了50 篇原创文章 · 获赞 14 · 访问量 7940

猜你喜欢

转载自blog.csdn.net/yeyuanxiaoxin/article/details/104753557