Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL:为什么下面的两个查询不能得到相同的输出?_Mysql_Sql_Output - Fatal编程技术网

Mysql SQL:为什么下面的两个查询不能得到相同的输出?

Mysql SQL:为什么下面的两个查询不能得到相同的输出?,mysql,sql,output,Mysql,Sql,Output,我正在努力寻找那些可能取得不同成绩的学生。如果你获得18分,你就通过了课程,最高分数是30分。因此,如果你获得了13个不同的分数,高于17分,那么你就获得了所有可能的及格分数。第一个查询返回0行,第二个查询返回一行,其中一个学生已收到所有可能的及格分数 select sid, name, count(grade) from student natural join exam group by sid, name having count(distinct grade > 17) = 13

我正在努力寻找那些可能取得不同成绩的学生。如果你获得18分,你就通过了课程,最高分数是30分。因此,如果你获得了13个不同的分数,高于17分,那么你就获得了所有可能的及格分数。第一个查询返回0行,第二个查询返回一行,其中一个学生已收到所有可能的及格分数

select sid, name, count(grade)
from student natural join exam 
group by sid, name
having count(distinct grade > 17) = 13; 



select sid, Name
from exam natural join student
group by sid
having count(distinct grade) = ( select count(distinct grade) 
                             from exam );

提前谢谢你

您不应该使用
自然连接
。这使得这个问题对于它正在做什么非常不清楚

在任何情况下,此代码:

count(distinct grade > 17)
只能返回
0
,或
1
,或
2
。为什么?因为它正在计算布尔表达式的不同值。布尔表达式只有两个值(加上
NULL

因此,它永远不会等于
13

,其中:

count(distinct grade > 17) 
实际上,您正在计算布尔表达式
grade>17
的不同值的数量,即
1
2
,因为布尔表达式可能只有两个不同的值:
0
表示
false
1
表示
true

grade>17
时,您应该计算
grade
的不同值,这可以通过以下方法完成:

count(distinct case when grade > 17 then grade end) 

你可以用这个例子来试验为什么它不起作用