今天突然发现mysql 中group by 的用法比较反常,一些之前sql server中出现的错误也可以执行。上网查了一下资料如下:
在不同的数据库里,对group by 的处理方式有些不太一样,对于sqlserver和mysql来说,group by有以下几点区别:
一、在SQLSERVER中group by 后面的出现的属性列值,应该是select 后面出现的属性列,比如:
select name,count(1)
from users
group by name
而下面这句则会报错:
select name,count(1)
from users
group by id
对于上面这句,在mysql中是可以执行的,我用的版本是Server version: 5.1.49-community MySQL Community Server (GPL)
二、在SQLSERVER中,如果select 后跟的属性列表中,同时使用了普通列名和聚合函数,则必须使用group by ,比如
select name,count(1) from users;
这句是要报错的。
而在mysql中这句也可以执行,其结果是将第一行的name取出显示,然后将所有表的数据进行聚合运算输出。举个例子吧:
mysql> select * from t3;
+----+------+---------------------+---------------------+
| id | name | alter_date | birthday |
+----+------+---------------------+---------------------+
| 1 | ljf | 2010-12-24 19:11:24 | 2010-12-22 00:00:00 |
| 2 | ljd | 2010-12-24 00:00:00 | 2010-12-24 00:00:00 |
| 3 | ldh | 2010-12-24 00:00:00 | 2010-12-24 00:00:00 |
| 4 | xw | 2010-12-25 19:21:31 | 2010-12-24 00:00:00 |
+----+------+---------------------+---------------------+
4 rows in set (0.05 sec)
mysql> select name,sum(id) from t3;
+------+---------+
| name | sum(id) |
+------+---------+
| ljf | 10 |
+------+---------+
1 row in set (0.00 sec)