关于GROUP BY规定的有关问题

关于GROUP BY规定的问题

书上在使用GROUP BY时,要有一定的规则,其中有两条是:

(1)GRUOP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。

(2)除聚集计算语句以外,SELECT语句中的每个列都必须在GROUP BY子句中给出。

我有一个test表,有三个字段:name,sex,age

我写了这样一条语句:select name, sex, count(1) from test group by age;

这条语句执行成功了。

我的问题是:

(1)GROUP BY子句中的字段age,不是检索列。

和书中第一条规定冲突。

(2)GROUP BY子句中没有列出name和sex字段。

和书中第二条规定冲突。

这是怎么回事呢?是书上说的有问题吗?



select name, sex, count(1) from test 

group by name,sex;




不是,你的SQL语句不是标准的SQL语句,只不过MYSQL没有报错

select name, sex, count(1) from test group by name, sex;

or

select age, count(1) from test group by age;




书上说的是SQL标准,而对于不同的数据库都可能与SQL标准有一点出入,或者说是扩展。

这就是理论和实践,研究和生产的区别吧。




select name, sex, count(1) from test group by age;

这句话虽然语法对 但是完全不符合任何理解

select name, sex, count(1) from test group by name,sex; 这样才对




MYSQL 对标准语法进行了扩充,允许使用这个 group by, 不在GROUP BY中的字段则由MYSQL自行选取。

关于GROUP BY规定的有关问题

相关文章:

你感兴趣的文章:

标签云: