首页 > 试题广场 >

表结构如下: CREATE TABLE `score` (

[不定项选择题]
表结构如下:
CREATE TABLE `score` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `sno` int(11) NOT NULL,
   `cno` tinyint(4) NOT NULL,
   `score` tinyint(4) DEFAULT NULL,
   PRIMARY KEY (`id`)
 ) ;
以下查询语句结果一定相等的是()
A.SELECT sum(score) / count(*) FROM score WHERE cno = 2;

B.SELECT sum(score) / count(id) FROM score WHERE cno = 2;

C.SELECT sum(score) / count(sno) FROM score WHERE cno = 2;

D.SELECT sum(score) / count(score) FROM score WHERE cno = 2;

E.SELECT sum(score) / count(1) FROM score WHERE cno = 2;

F.SELECT avg(score) FROM score WHERE cno = 2;
  • A,E,F
  • A,D,F
  • A,B,C,D
  • D,F
  • A,B,E,F
  • A,B,C,E
所有的统计函数都会忽略空值(null)。
A :统计所有学生的平均分,就算成绩为空的学生,最后计算count(*)时也作为分母基数,计算得到所有学生的平均分。
B :与A一样,因为id主键非空,count(id)所得分母基数是所有学生。
C : 与B一样,非空属性sno。
D :由于score字段的值可能是空,空值在统计时忽略,所以count(score)和sum(score)统计的只是score不为空的学生,计算得到的平均分也只是有成绩的学生的平均分,无法计算所有学生的平均分。
E: count(1)与count(*)一样。
F:avg(score)会忽略空值,故计算结果为有成绩的学生的平均分。
发表于 2020-03-24 11:37:56 回复(19)
<p>这题有问题,数据库里虽然标明sno not null,但空字符串也是可以能出现的,这样分母就会变小</p>
发表于 2020-11-14 08:07:44 回复(0)
C选项是为什么?
发表于 2020-02-21 17:00:57 回复(2)

1、count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL。

2、count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL。

3、count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空。

发表于 2019-08-06 20:24:36 回复(1)
A,B,C,E返回sum(score)除以行数;D,F返回sum(score)除以score不为null的行数
发表于 2020-03-11 15:38:50 回复(3)

select count(*)和select count(1)的区别:

一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的。
假如表没有主键(Primary key), 那么count(1)比count(*)快,
如果有主键的话,那主键作为count的条件时候count(主键)最快,如果你的表只有一个字段的话那count(*)就是最快的。

count(*) 跟 count(1) 的结果一样,都包括对NULL的统计,而count(column) 是不包括NULL的统计。


发表于 2020-03-10 18:53:47 回复(1)
count(字段名):会忽略该列中所有的null值
count(*):不会忽略null值,本质计算的是行数
count(1):不会忽略null值,本质计算的是行数
由于id、sno都not null,因此count(*)、count(1)、count(id)、count(sno)本质都是计算行数,所有结果一样,即ABCE
avg函数会忽略null值,而score字段default null,因此在根据score字段计算行数的时候,会将该列的所有null值忽略,最终结果一样,即DF
发表于 2020-09-01 16:39:50 回复(1)
id sno cno score
1   2     2    80
2   4     2     null
如果是这样的表,则ABCE选项答案为 80/2    DF选项答案为 80/1  
发表于 2020-04-04 14:53:37 回复(0)
avg()不算null
发表于 2020-10-05 15:36:46 回复(0)
发表于 2020-04-21 18:18:14 回复(1)
avg(score)是对所有有成绩的学生成绩求和然后除以有成绩的学生数,而不是总学生数
发表于 2021-08-11 08:54:59 回复(0)

Score 是默认约束 为nullid /sno /cno 都是不为空的字段,id还是自增的主键

count(1)count(*)都是统计全部的包括值为null的,而count(score)统计忽略空值行(对象),avg(score)也会忽略空值行(对象)

都是求平均成绩:D和F都会忽略 空值,所以DF一样结果

                            ABCE都是计算的全部,所以是一样的结果

主要考察:avg(column_name)时忽略空值,count(column_name)时忽略空值

                 Count(1)count(*)效果一样,统计全部个数(count(1)比count(*)高效)

                 默认约束 default 的默认值设置了null

编辑于 2021-06-05 16:03:06 回复(1)
当聚集函数遇到空值时,除了COUNT(*)之外,都跳过空值而只处理非空值。
                                                                                                  --- 《数据库系统概论》
    
编辑于 2021-03-22 18:56:53 回复(1)
count(score)代表计算不为score不为null的总行数;
avg(score)计算的时候忽略null的行;
同时其他聚集函数min() max() sum()同样忽略null的行
发表于 2020-03-26 21:25:57 回复(0)
avg()不是会忽略空值吗?
发表于 2020-03-15 17:27:03 回复(1)
注意AVE()忽略NULL值,而不是将其作为“0”参与计算
发表于 2020-03-09 22:58:10 回复(0)
这题的关键是在于需不需要统计为null的行作为算平均分的分母,如果求平均分不希望把没有成绩的行排除掉,那count()括号里肯定是score,如果平均分要把所有的行作为被除数,则选则abce。
发表于 2023-12-18 22:36:45 回复(0)
avg函数火忽略空值,所以这里得到的是有成绩学生的平均值
发表于 2022-07-15 16:34:57 回复(0)
所有的统计函数都会忽略空值(null)。
A.SELECT sum(score) / count(*) FROM score WHERE cno = 2;
A :统计所有学生的平均分,就算成绩为空的学生,最后计算count(*)时也作为分母基数,计算得到所有学生的平均分。
B.SELECT sum(score) / count(id) FROM score WHERE cno = 2;
B :与A一样,因为id主键非空,count(id)所得分母基数是所有学生。
C.SELECT sum(score) / count(sno) FROM score WHERE cno = 2;
C : 与B一样,非空属性sno。
D.SELECT sum(score) / count(score) FROM score WHERE cno = 2;
D :由于score字段的值可能是空,空值在统计时忽略,所以count(score)和sum(score)统计的只是score不为空的学生,计算得到的平均分也只是有成绩的学生的平均分,无法计算所有学生的平均分。
E.SELECT sum(score) / count(1) FROM score WHERE cno = 2;
E: count(1)与count(*)一样。
F.SELECT avg(score) FROM score WHERE cno = 2;
F:avg(score)会忽略空值,故计算结果为有成绩的学生的平均分。

笔记:count(1)和count(*)都会统计空值
count(字段a),如果这个字段a为空的话,那就统计不上这个字段

故:A,B,C,E统计的结果一样,都是统计班级所有学生的平均分。
D,F统计结果一样,统计的是有成绩的学生平均分。
发表于 2022-07-14 17:12:19 回复(1)