在 MySQL SELECT 查询中,为什么我们不应将组函数与无组字段一起使用,而不用 GROUP BY 子句呢?
这是因为如果没有 GROUP BY 子句,MySQL 返回的输出可能会产生误导。针对下面给出的“学生”表提供以下示例来说明 −
mysql> Select * from Student; +------+---------+---------+-----------+ | Id | Name | Address | Subject | +------+---------+---------+-----------+ | 1 | Gaurav | Delhi | Computers | | 2 | Aarav | Mumbai | History | | 15 | Harshit | Delhi | Commerce | | 20 | Gaurav | Jaipur | Computers | +------+---------+---------+-----------+ 4 rows in set (0.00 sec) mysql> Select count(*), Name from Student; +----------+--------+ | count(*) | name | +----------+--------+ | 4 | Gaurav | +----------+--------+ 1 row in set (0.00 sec)
正如从上面查询结果中观察到的那样,它返回了表中总行数的组函数 COUNT(*) 的输出,但字段“名称”中的值“Gaurav”具有误导性,因为我们不知道它是基于什么,要么是列的第一个值,要么是多次存储在列中,MySQL 返回了该值。
如果使用 GROUP BY 子句编写此查询,则结果集如下 −
mysql> Select count(*), name from student GROUP BY id; +----------+---------+ | count(*) | name | +----------+---------+ | 1 | Gaurav | | 1 | Aarav | | 1 | Harshit | | 1 | Gaurav | +----------+---------+ 4 rows in set (0.00 sec)
可以从上面的结果集中观察到,借助 GROUP BY 子句,我们得到了一个有意义的输出。
广告