sql 语句 中的order by 和 group by
以下Tbstudent为表名
语法 order by 字段名 asc(升序)/desc(降序)
--order by 排序, 一个select中只能有一个order by 如果不写asc 默认是asc
select stuName,stuNumber,stuMath from Tbstudent order by stuMath asc
select stuName,stuNumber,stuMath,stuEnglish from Tbstudent
order by stuMath asc, stuEnglish asc
--聚合函数不允许有多个字段
-- 根据平均分查询 --order by 后面可以使用别名 但是where后不行
select stuName,stuNumber ,ISNULL(CAST(stuMath as varchar(4)),'缺考') as stuMath,stuEnglish,
(stuMath + stuEnglish)/2.0 as '平均分'
from Tbstudent
where (stuMath + stuEnglish)/2.0 > 60
order by 平均分
提示:order by一定要写在最后一条
--group by 分组查询 分组后可统计 COUNT 分组后聚合函数只在分好的组中计算
select stuGender,COUNT(1) as 性别人数 from Tbstudent group by stuGender
--根据地方分组 分组查询原则:在select出现 聚合语句中只能有一个字段 除非都在group中 多个聚合函数也行
select stuAddress ,COUNT(1) as 地方人数 from Tbstudent group by stuAddress
order by 地方人数 desc
select stuClassId ,AVG((stuMath+stuEnglish)/2) from Tbstudent
where stuGender = 1
group by stuClassId
--where 只能筛选原始表中的 where AVG((stuMath+stuEnglish)/2) 这样是不行的
-- 要想使用的 话必须使用having 子句 having只能和group by 一起使用 having是对分组的节选 having的条件必须是参与分组的
select stuClassId ,AVG((stuMath+stuEnglish)/2) from Tbstudent
where stuGender = 1
group by stuClassId
having AVG((stuMath+stuEnglish)/2) >70
--select 完整语序
-- select 字段
-- from 表名
-- where 条件
-- group by 列
-- having 分组后的筛选条件
--order by 列
这是一个select的完整的顺序,先后顺序是固定不变的。