Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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_Database - Fatal编程技术网

Mysql SQL查询中出现问题(预期输出未出现)

Mysql SQL查询中出现问题(预期输出未出现),mysql,sql,database,Mysql,Sql,Database,我是Mysql新手。我有一个table Student,列属性如下: Result as 'F for fail','P' for pass, Four department MECH,CSE ECE,EEE, YEAR as 1,2,3,4 Mark from 1 to 100 Name as name of student and first column is auto generated Id 我的预期产出是: 我尝试使用以下方法获取此输出: SELECT t1.* FROM(

我是Mysql新手。我有一个table Student,列属性如下:

Result as 'F for fail','P' for pass,
Four department MECH,CSE ECE,EEE,
YEAR as 1,2,3,4 
Mark from 1 to 100
Name as name of student
and first column is auto generated Id

我的预期产出是:

我尝试使用以下方法获取此输出:

 SELECT t1.* FROM(SELECT YEAR,
CASE WHEN DEPT='CSE' THEN COUNT(RESULT) ELSE NULL END CSE ,
CASE WHEN DEPT='ECE' THEN COUNT(RESULT) ELSE NULL END ECE,
CASE WHEN DEPT='MECH' THEN COUNT(RESULT) ELSE NULL END MECh, 
CASE WHEN DEPT='EEE' THEN COUNT(RESULT) ELSE NULL END EEE,
 CASE WHEN DEPT='CIE' THEN COUNT(RESULT) ELSE NULL END CIE
 FROM OT.STUDENT GROUP BY YEAR,DEPT,RESULT) t1
我的输出是:

我被困在这里。我已经完成了分组,但为什么1,2,3,4会重复出现?1打印了8次,因为只有四年时间。我想我的查询错了。这是我升序排序时的输出:


我认为您需要条件聚合。这看起来像:

SELECT YEAR,
       SUM(CASE WHEN DEPT = 'CSE' AND RESULT = 'P' THEN 1 ELSE 0 END) as CSE_pass,
       SUM(CASE WHEN DEPT = 'CSE' AND RESULT = 'F' THEN 1 ELSE 0 END) as CSE_fail,
       SUM(CASE WHEN DEPT = 'ECE' AND RESULT = 'P' THEN 1 ELSE 0 END) as ECE_pass,
       . . .
FROM OT.STUDENT
GROUP BY YEAR;

groupby
键定义结果集中的每一行——每个值的组合都是一行。您希望每年有一行,因此这应该是
GROUP BY

中唯一的一列。我认为您需要条件聚合。这看起来像:

SELECT YEAR,
       SUM(CASE WHEN DEPT = 'CSE' AND RESULT = 'P' THEN 1 ELSE 0 END) as CSE_pass,
       SUM(CASE WHEN DEPT = 'CSE' AND RESULT = 'F' THEN 1 ELSE 0 END) as CSE_fail,
       SUM(CASE WHEN DEPT = 'ECE' AND RESULT = 'P' THEN 1 ELSE 0 END) as ECE_pass,
       . . .
FROM OT.STUDENT
GROUP BY YEAR;

groupby
键定义结果集中的每一行——每个值的组合都是一行。您希望每年有一行,因此这应该是
分组依据

中唯一正确标记的列!!!如果这是MySQL,为什么我会在这个问题上看到Oracle标签?我在用toad Oracle做,但你说这是MySQL?如果你删除
否则为NULL会发生什么?同样的结果正确地出现了!!!如果这是MySQL,为什么我会在这个问题上看到Oracle标签?我在用toad Oracle做,但你说这是MySQL?如果你删除
否则为NULL会发生什么?同样的结果出现了