在 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 子句,我们得到了一个有意义的输出。

更新于: 30 年 1 月 2020 日

186 次浏览

开启您的 职业 生涯

通过完成这门课程来获得认证

马上开始
广告