对于我的计算课程中的一个问题,我被要求详细解释以下SQL脚本:
SELECT exam_board, COUNT(*)
FROM subjects
GROUP BY exam_board;
以下是我针对该问题所写的内容。我只是想知道我是否忘记包含某些内容,或者我是否错误地陈述了某些内容。任何反馈都会非常感激!
脚本以SELECT语句开头。 SELECT语句从一个或多个表或数据库中检索记录(然后,返回的数据存储在结果表中,称为结果集)。 'COUNT()'是一个函数,它返回(所有(如有星号))与指定条件匹配的行数,并给出查询中提取的记录总数。因此,'SELECT exam_board,COUNT()FROM subject'表示该脚本将从'subject'表中的'exam_board'列返回所有考试委员会的计数(该考试委员会有多少科目) 。最后,最后一行是'GROUP BY exam_board;''GROUP BY'子句经常在SELECT语句中用于从多个记录中收集数据。其目的是将结果分组到一列或多列中。在这种情况下,它按'exam_board'分组,这意味着查询结果将被分组到考试委员会的一列。
答案 0 :(得分:3)
您忘记了GROUP BY的效果是将分组列中的每个不同值的结果集减少到一行(此查询中的exam_board)。
因此,subject表中可能有10,000行,但exam_board只有四个不同的值。使用GROUP BY意味着结果集中只有四行,每个exam_board只有一行。
然后COUNT(*)将是"折叠的行数"对于每个相应的小组。
我要求你不复制&粘贴我的答案,但用你自己的话写下你自己的答案。我的写作风格与你的风格完全不同,所以如果你复制和粘贴,对你的老师来说很明显,你解除了这个。
答案 1 :(得分:0)
其实这不是最好的答案。
SELECT不仅可以返回表中的数据,还可以返回任何函数的结果,例如SELECT VERSION()返回服务器软件的版本。
作为COUNT(*)参数的星号无关紧要。你可以在这里添加任何列或函数,甚至COUNT(VERSION()),结果都是一样的。
'SELECT exam_board,COUNT()FROM subject'将返回包含两列的单行:表'subject'中的总行数和第一行中'exam_board'列的值桌子的一排。
表格内容:
mysql> select exam_board from subjects;
+------------+
| exam_board |
+------------+
| 2 |
| 2 |
| 3 |
| 3 |
| 3 |
+------------+
5 rows in set (0.00 sec)
将列值和函数混合在一起,返回单个值,如SUM(),MIN(),MAX()等,无需分组函数:
mysql> select exam_board, count(*) from subjects;
+------------+----------+
| exam_board | count(*) |
+------------+----------+
| 2 | 5 |
+------------+----------+
1 row in set (0.00 sec)
只有使用分组运算符,我们才能得到所需的结果:exam_board字段的每个值的记录数。
mysql> select exam_board, count(*) from subjects group by exam_board;
+------------+----------+
| exam_board | count(*) |
+------------+----------+
| 2 | 2 |
| 3 | 3 |
+------------+----------+
2 rows in set (0.00 sec)