SQL查询二之分组统计
分组必统计,分组查询其实是排序
1 --使用in查询信息工程系和电子商务系的学生 2 3 --查询信息工程系和电子商务系的学生 4 5 select * from student where stuDept=\'信息工程系\' or stuDept=\'电子商务系\' 6 7 select * from student where stuDept in(\'电子商务系\',\'信息工程系\') 8 9 10 select * from student 11 12 --使用count函数查询全体学生的人数 13 14 select count(stuId) as 人数 from student 15 16 select count(*) as 人数 from student 17 18 19 /********************************/ 20 --分组必统计 21 --使用group分组查询各系学生的数量 22 23 --男生女生各多少人 24 25 26 27 select * from student 28 29 select stuSex, max(stuAvgrade) from student 30 group by stuSex 31 32 --查询男生和女生都有谁:(分组查询信息-都有谁-:是排序不是分组) 33 select stuSex, * from student 34 order by student.stuSex 35 36 --各系学生的数量 37 select stuDept,count(*) as 人数 from student 38 group by stuDept 39 40 select * from student 41 42 计算机系 男 3 43 计算机系 男 1 44 电子商务系 男 1 45 电子商务系 女 1 46 47 48 --各系男生女生各多少人 49 select stuDept, stuSex,count(*) as 人数 from student 50 group by stuDept,stuSex 51 52 53 select stuDept, stuSex,count(*) as 人数 from student 54 group by stuDept, stuSex 55 56 --各系学生总分数 57 58 59 select stuDept, sum(stuAvgrade) as 总成绩 from student 60 group by stuDept 61 62 --每个系的成绩最好的 63 select stuDept, Max(stuAvgrade) as 最好的一个 from student 64 group by stuDept 65 66 select stuDept, Min(stuAvgrade) as 最差劲的一个 from student 67 group by stuDept 68 69 70 select stuDept, avg(stuAvgrade) as 平均 from student 71 group by stuDept 72 73 select * from student 74 75 --统计各系的男生和女生各多少人 76 select stuDept,stuSex,COUNT(*) from student 77 group by stuDept, stuSex 78 order by stuDept --order by 排序 79 80 81 --查询各系学生信息 82 83 84 85 select * from student 86 group by stuDept,stuId,stuName 87 88 select stuDept, stuName, stuSex, stuBirth, stuSpeciality, stuAvgrade from student 89 group by stuDept, stuName, stuSex, stuBirth, stuSpeciality, stuAvgrade --这样写是可以的,其实组到最后,会发现等同于select * from student,也就是过分分组等于没有分组 90 91 --查询各系学生的信息,不是分组,因为分组必统计,这里其实是按系进行排序的概念 92 select student.stuDept, student.* from student 93 order by student.stuDept 94 95 --查询每个系的各专业的学生人数 96 select stuDept, stuSpeciality, count(*) from student 97 group by stuDept, stuSpeciality 98 99 --查询每个系的各专业的最好成绩 100 101 102 103 select stuDept, stuSpeciality, max(stuAvgrade) from student 104 group by stuDept, stuSpeciality 105 106 107 108 109 select stuDept, stuName, stuSex, stuBirth, stuSpeciality, stuAvgrade from student 110 order by stuDept -- order by 是排序关键字 dian, ji, xin 111 112 select * from student order by stuAvgrade Desc --desc是降序,默认值是Asc 113 114 select * from student order by stuAvgrade Asc 115 116 117 --使用having子句查询人数大于2的系 118 119 --查询人数大于2的系 120 121 --select stuDept from student where count(*) > 2 122 123 124 --//where子句是用于分组前的条件筛选// 125 select stuDept from student 126 where count(*) > 2 127 group by stuDept --非法,where条件部分不能有聚合函数 128 129 --select stuDept from student where count(*) > 2 group by stuDept 这样的写法是我们很自然就想到的,但是是非法,因为在Sql中不能在where条件后使用有计算的表达式,如聚合函数 130 131 132 --//having子句用于分组后的筛选 133 select stuDept, count(*) as 人数 from student 134 group by stuDept 135 having count(*) >= 2 136 137 select * from student 138 139 140 141 142 --查询人数大于1的系并且,不能是计算机系 143 144 --能在分组前的where子句中筛选的就一定要放在where子句中 145 select stuDept from student 146 group by stuDept 147 having count(*) >= 2 and stuDept <> \'计算机系\' 148 149 select stuDept from student 150 where stuDept <> \'计算机系\' 151 group by stuDept 152 having count(*) >= 2 153 154 155 156 157 select stuDept as 系, count(*) as 人数, sum(stuAvgrade) as 总成绩, avg(stuAvgrade) as 平均成绩, max(stuAvgrade) as 最好成绩 from student 158 group by stuDept 159 having count(*) > 2 160 161 --查询平均成绩大于全体学生平均成绩的学生的信息 162 163 164 select * from student 165 where stuAvgrade > ( 166 select AVG(stuAvgrade) from student 167 )
版权声明:本文为myBlogOu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。