由于使用Group By,所以产生多组数据。
select中一次只能处理一行数据,所以无法一次处理一组数据。
只能将一组转化为一行数据。(例如:利用聚合函数)
例(1):
select 班级, AVG(年龄) as 平局年龄 from 学生表 group by 班级
上面SQL执行的过程是:
(1) 先执行from 然后根据“班级”进行分组(得到多个逻辑组)
(2) 然后执行select语句。select一次只能处理行数据,但不能处理“组数据”
所以写成
例(2)“select 年龄 from 学生表 group by 班级”将是错误的。
----------------------------------------------------
如果我们要想要利用“组数据”就需要将其进行转换。
例如上面的“例(1)”是利用AVG()去遍历“单组”的数据然后得到一个“单独数据”
(用于填充一行,然后select就能去处理这行了)。
不知道我理解的是否正确?
[code="java"]例(2)“select 年龄 from 学生表 group by 班级”将是错误的。 [/code]
不过上面这个说法不一定对,
mysql 下它是对的,”年龄“它会自动取每组里的第一个“年龄”
比如:
table users
id name age sex
1 xiaozhang 20 male
2 xiaowang 21 fmale
3 xiaozhu 22 male
4 xiaoye 25 fmale
5 xiaochen 23 male
6 xiaoxiao 28 male
select age, sex from users group by sex
结果:
age sex
20 male
21 fmale
这样理解OK啊