为MySql详细解释SELECT语句脚本

时间:2017-04-19 17:28:20

标签: mysql sql

对于我的计算课程中的一个问题,我被要求详细解释以下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'分组,这意味着查询结果将被分组到考试委员会的一列。

2 个答案:

答案 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)