mysql--排序、聚合、分组、分页

--排序
		--order by 字段  默认从小到大
		--asc 从小到大   desc 从大到小
				--查询年龄在18到34之间的男性,按照年龄从小到大排序
				select * from students where (age between 18 and 34) and gender=1 order by age;
				select * from students where (age between 18 and 34) and gender=1 order by age asc;
				
				-- 查询年龄在18到34之间的女性,身高从高到矮排序
				select * from students where (age between 18 and 34) and gender=2 order by height desc;
				
				--查询年龄在18到34之间的女性,身高从高到矮排序,当身高相同的情况下按照年龄从小到大
				select * from students where (age between 18 and 34) and gender=2 order by height desc,age;
				
				--按照年龄从大到小,身高从高到矮排序
				select * from students order by age desc, height desc;

--聚合函数

		--总数 count 
				--  查询男性多少人  女性多少人    总数多少人
				select count(*) from students where gender=1;
				select count(*) as 男生人数 from students where gender=1;  -- 起个名字
				select count(*) as 女生人数 from students where gender=2;
				select count(*) as 总人数  where gender=2;
				
		--最大值  max 
				--查询最大的年龄
				 select max(age) from students;
				
		--最小值 min 
				--查询最矮的女性身高
				select min(height) from students where gender=2;
				
		--求和 sum
				--计算年龄总和
				 select sum(age) from students;
				
		--平均值 avg
				--计算平均年龄
				select sum(age)/count(*) from students;
			    select avg(age) from students;
				
		--四舍五入 round(123.123, 1) 保留一位小数
				--计算平均年龄,保留两位小数
				select round(avg(age),2) from students;
				
--分组  要和聚合在一起使用才有意义
		--group by
				-- 查询同类性别的人数
				select gender,count(*) from students group by gender;
				
		--group concat(...)
				--查询同类性别的姓名
				 select gender,group_concat(name) from students group by gender;
				 --查询同类性别的姓名,并且显示每个人的年龄和id
				 select gender,group_concat(name,'_',age,'_',id) from students group by gender;

		-- having 条件  这是对分好的组进行条件判断
				--查询平均年龄超过30岁的性别,以及姓名 
				select gender , group_concat( name) from students  group by gender having avg(age)>30;
				--查询每种性别中的人数大于2的信息
				select gender, group_concat(name)  from students group by gender having count(*)>2;

--分页
		--limit  
				-- limit 数字                --限制查询出来的数据个数
				
						--查询前五个数据
						select * from students limit 5;
						
				-- limit 数字1,数字2     -- 数字1  表示起始的位置,数字2  表示个数
				
						--	 查询3-5的数据   这里的下标是从0开始的,所以应该是2,3
						select * from students limit 2,3;
						
						-- 每页两个数据,显示第3页
						select * from students limit 4,2;   --(页数-1)*2
						
						--每页显示2个,显示第三页,按照年龄从小到大排序
						select * from students order by age limit 4,2;   ---顺序,where   order by  limit  不能乱

你可能感兴趣的:(MySQL)