您的位置 首页 数据库

mysql group by 实战

mysql group by 实战

 

实际操作命令演示:select+from+where+group by+聚合函数(统计函数) 结合使用情况

在利用select语句查询数据信息,结合group by子句可以实现分组查询,并且还必须配合聚合函数对分组查询的数据做相应处理;

数据库服务中常用的聚合函数(统计函数):

序号 函数信息 解释说明
01 count() 表示求指定列的总记录数
02 sum() 此函数表示求指定列的和
03 avg() 此函数表示对数值信息进行求平均值
04 min() 此函数表示对数值信息进行取最小值
05 max() 此函数表示对数值信息进行取最大值
06 group_concat() 此函数表示输出信息无法匹配分组和聚合函数时,进行拼接整合显示

 

利用group by进行分组查询的执行逻辑分析:

  • 根据查询语句信息,取出表中关注的列字段信息;
  • 根据查询分组信息,将特定列字段信息进行排序,从而将分组的一致信息整合在一起(形成结果集);
  • 根据分组合并信息,结合使用的聚合函数,进行数值信息运算或统计(生成最终结果);
  • 根据分组聚合要求,分组信息输出时必须和分组信息一一对应,但特殊列无法一一对应输出时,可使用group_concat()拼接输出

 

 

 

测试 ,导入数据 :

数据在这里

mysql: https://url69.ctfile.com/d/253469-56755836-403176?p=2206 (访问密码: 2206)

/usr/local/mysql/bin/mysql -uroot -p123456 < world.sql

 

实际操作命令演示:获取分组数据信息进行聚合函数处理实践:

# 查询统计每个国家的人口总数

我们先看看表结构

首先


 查询统计每个国家的人口总数

select * from world.city  goupby  CountryCode ; #现根据 国家分组
#然后早出 人口总数

select CountryCode,  sum(population) from world.city group by CountryCode;

-- 根据国家信息分组聚合,在将分组后所有城市的人口数量进行sum求和运算,实现国家信息对应人口总数的1对1关系
查询统计每个省份的城市个数
# 查询统计每个省份的城市个数

select  district , count(district) from  city  group by district ;


中国的代码为  chn 

select  district , count(district) from  city where countrycode='chn'   group by district ;

 

# 查询统计每个省份的城市个数,以及城市名称信息(经常面试题考到
select district , count(district),name from city where countrycode='chn' group by district ;

会出现报错

解决方案:

-- 利用group_concat()就可以实现没有出现在分组和聚合函数中的字段,采取拼接整合方式显示,满足分组1对1关系

select district , count(district),group_concat(name) from city where countrycode='chn' group by district ;

 

 

实际操作命令演示:select+from+where+group by+聚合函数+having

在利用select语句查询数据信息,结合分组和聚合函数处理之后,可以将输出的信息再进行过滤处理(having);

having是在分组后对数据进行过滤.,where是在分组前对数据进行过滤。

 

实际操作命令演示:对分组聚合后数据进行过滤处理

# 查询统计每个国家的人口总数,只显示人口数量超过1个亿的信息

select sum(population) from city group by CountryCode having sum(population) > 100000000;

实际操作命令演示:select+from+where+group by+聚合函数+having+order by

在利用select语句查询数据信息,结合分组和聚合函数处理之后,并且再次经过筛选的数据,按照一定数值规律排序显示信息

实际操作命令演示:

# 查询统计每个国家的人口总数,只显示人口数量超过5千万的信息,并且按照国家人口总数排序显示
select countrycode, sum(population) from city group by CountryCode having sum(population) > 50000000 order by sum(population);

-- 实现了人口数量从小到大排序(升序/正序)

select countrycode, sum(population) from city group by CountryCode having sum(population) > 50000000 order by sum(population) desc;

-- 实现了人口数量从大到小排序(降序/逆序)

实际操作命令演示:select+from+where+group by+聚合函数+having+order by+limit

在利用select语句查询数据信息,结合分组和聚合函数处理之后经过筛选的数据,按照一定数值规律排序显示信息,并限制输出内容行数

实际操作命令演示:

# 查询统计每个国家的人口总数,只显示人口数量超过5千万的信息,并且按照国家人口总数从大到小排序,只显示前三名
mysql > select countrycode,sum(population) from world.city group by countrycode having sum(population)>50000000 order by sum(population) desc limit 3;
或者
mysql > select countrycode,sum(population) from world.city group by countrycode having sum(population)>50000000 order by sum(population) desc limit 0,3;
mysql > select countrycode,sum(population) from world.city group by countrycode having sum(population)>50000000 order by sum(population) desc limit 3 offset 0;
​
# 查询统计每个国家的人口总数,只显示人口数量超过5千万的信息,并且按照国家人口总数从大到小排序,只显示三~五名
mysql > select countrycode,sum(population) from world.city group by countrycode having sum(population)>50000000 order by sum(population) desc limit 2,3;
或者
mysql > select countrycode,sum(population) from world.city group by countrycode having sum(population)>50000000 order by sum(population) desc limit 3 offset 2;
-- 跳过前2名,显示后面的三名数据信息

 

 

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章