想测试一下group by单独使用的情况,结果发现好多问题,求高手解答(用的Mysql数据库)。
(1)单独使用group by分组,下面是表结构、SQL语句以及输出数据,怎么会是这个结果啊?(用的Mysql数据库)本来想的是会把classId为1的放在一起,为2的全部放在一起,结果怎么就只显示了两条数据呢?(2)我想把classId相同的放在一起显示应该怎么做呢,order by除外哈,order by可以实现,不过我就想知道通过group by该怎么写?(3)不是说select后面的字段,要么出现在group by字句后面,要么出现在聚合函数里,可是我上面的select * 居然也没报错。(4)不是说having只能和group by配合使用么,可是我下面这个语句居然也没报错。
(5)感觉group by,having字句好混乱啊。
(1)单独使用group by分组,下面是表结构、SQL语句以及输出数据,怎么会是这个结果啊?(用的Mysql数据库)本来想的是会把classId为1的放在一起,为2的全部放在一起,结果怎么就只显示了两条数据呢?(2)我想把classId相同的放在一起显示应该怎么做呢,order by除外哈,order by可以实现,不过我就想知道通过group by该怎么写?(3)不是说select后面的字段,要么出现在group by字句后面,要么出现在聚合函数里,可是我上面的select * 居然也没报错。(4)不是说having只能和group by配合使用么,可是我下面这个语句居然也没报错。
(5)感觉group by,having字句好混乱啊。
1 建议看看group by的作用,将相同的值分组统计,你的classId只有两个,肯定只有两条语句2 如果没有别的条件,只通过classId分组,实现不了3 这个写法是错的,mysql默认使用不严格的SQL模式,最好不要这么使用4 一般不这么写,不聚合的使用where效率更好,where是先过滤后取值,而having是先取值后过滤5 建议先弄懂group by是干啥用的
这个比较适合做分组统计还有就是解决distinct的去重复问题,DISTINCT 是对整个查询字段的排重,当我们只需要对某一个或几个字段排重时候可以使用。这个就是你最开始的Sql为什么只查询出两条。
2. having 没见过这样使用的。
2,如果你要用select输出表中的所有字段,用group by classID貌似 不行。你用select classID from stu group by classID;会输出1 和2,只能这样看classID字段值的不同值。
3,select *是输出表的所有字段,你说的group by 后面classID字段 ,select *也包括,所以不会报错
4,在MySQL中having非常类似于where,有些类型的where子句可以用having代替,唯一的区别是where过滤行,having过滤分组。其实你这个语句就类似于select * from stu where age>19;
5,给你三个例子:一.select age from stu group by age;按age分组
二.select age from stu having age;查询age所有值
三.select age from stu group by age having age<25;将age小于25的分组
你自己操作一下,然后比较一下结果,就知道了。