SQL查询
1、执行顺序
3、select ...聚合函数 from 表名
1、where ...
2、group by ...
4、having ...
5、order by ...
6、limit ...
2、group by
1、作用 :给查询结果进行分组
2、示例
1、查询表中一共有几个国家
2、计算每个国家的平均攻击力
select country,avg(gongji) from sanguo
group by country;
先分组 -> 再聚合 -> 再去重
蜀国
蜀国
蜀国 --> 120 --> 蜀国
魏国
魏国 --> 110 --> 魏国
吴国 --> 115 --> 吴国
3、查找所有国家中英雄数量最多的前2名的 国家名称和英雄数量
select country,count(id) as number from sanguo
group by country
order by number desc
limit 2;
3、注意
1、group by之后的字段名必须要为select之后的字段名
2、如果select之后的字段名和group by之后的字段不一致,则必须对该字段进行聚合处理(聚合函数)
3、having语句
1、作用
对查询的结果进行进一步筛选
2、示例
1、找出平均攻击力>105的国家的前2名,显示国家名和平均攻击力
select country,avg(gongji) as pjgj from sanguo
group by country
having pjgj>105
order by pjgj DESC
limit 2;
3、注意
1、having语句通常和group by语句联合使用,过滤由group by语句返回的记录集
2、where只能操作表中实际存在字段,having可操作由聚合函数生成的显示列
4、distinct
1、作用 :不显示字段重复值
2、示例
1、表中都有哪些国家
select distinct country from sanguo;
2、计算蜀国一共有多少个英雄
select count(distinct id) from sanguo
where country="蜀国";
3、注意
1、distinct和from之间所有字段都相同才会去重
2、distinct不能对任何字段做聚合处理
5、查询表记录时做数学运算
1、运算符
+ - * / %
2、示例
1、查询时所有英雄攻击力翻倍
select id,name,gongji*2 as gj from sanguo;
## sudo apt-get install python3-pip
## sudo pip3 install pymysql