Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Php 在MYSQL查询和左连接上显示空值_Php_Mysql_Join_Row_Left Join - Fatal编程技术网

Php 在MYSQL查询和左连接上显示空值

Php 在MYSQL查询和左连接上显示空值,php,mysql,join,row,left-join,Php,Mysql,Join,Row,Left Join,我有一个疑问: SELECT pupils.id_pupil , name , surname , (select round(avg(qualifications.calificacion),2) from qualifications where id_pupil = pupils.id_pupil and qualifications.id_trimester=incidents.id_trimester and type_qualification='class')

我有一个疑问:

SELECT 
    pupils.id_pupil
  , name
  , surname
  , (select round(avg(qualifications.calificacion),2) from qualifications where id_pupil = pupils.id_pupil and qualifications.id_trimester=incidents.id_trimester and type_qualification='class') as media
  , (select count(calificacion) from qualifications where id_pupil = pupils.id_pupil and qualifications.id_trimester=incidents.id_trimester and type_qualification='class') as count
  , COALESCE(sum(type_incident='miss' and level=1 and class='A' and id_trimester=1),0) as misses
  , COALESCE(sum(type_incident='delay' and level=1 and class='A' and id_trimester=1),0) as delays
  , COALESCE(sum(type_incident='attitude' and level=1 and class='A' and id_trimester=1),0) as attitude
  , COALESCE(sum(type_incident='miss_justif' and level=1 and class='A' and id_trimester=1),0) as misses_justificadas 
FROM 
    pupils 
    left join incidents         ON incidents.id_pupil=pupils.id_pupil
WHERE 
    level=1
    and class='A' 
    and id_trimester=1 
GROUP BY id_pupil
表:

pupils: (id_pupil, name, surname, email, user, pass, level, class)
incidents: (id_incidents, date, time, type_incident, comments, id_pupil, id_user, subject, id_trimester)
qualifications: (id_qualification, qualification, date, time, subject, id_pupil, id_user, id_trimester, type_qualification)
它可以工作,但不显示四个值为0的未命中、延迟、姿态和未命中的行。那一行被省略了

如何显示所有行


谢谢

您的查询有一些问题。我做了一个修改,也许你能给你想要的结果。也许你应该把你的名字、姓氏、媒体和计算值放在你的群组中,但这取决于你的需求

SELECT 
 pupils.id_pupil
 , name
 , surname
 , IFNULL(qua.media, 0) media
 , IFNULL(qua.count, 0) count
 , sum( case when type_incident='miss' then 1 else 0 end ) as misses
 , sum( case when type_incident='delay' then 1 else 0 end ) as delays
 , sum( case when type_incident='attitude' then 1 else 0 end ) as attitude
 , sum( case when type_incident='miss_justif' then 1 else 0 end ) 
 as misses_justificadas 
FROM 
 pupils 
 LEFT JOIN incidents ON incidents.id_pupil=pupils.id_pupil
 LEFT JOIN
 (select id_pupil, id_trimester, 
 count(qualification) count, 
 round(avg(qualifications.qualification),2) media
 from qualifications 
 where type_qualification='class'
 group by id_pupil, id_trimester ) as qua
 ON ( qua.id_pupil = pupils.id_pupil )
WHERE 
 level=1
 and class='A' 
 and qua.id_trimester=1 
GROUP BY pupils.id_pupil

你的算术全搞糟了。您在where语句中的条件与SUM语句中的条件完全相同。您可以发布事件表吗?@RubenGiaquinto我已经发布了该表。在这种情况下,您没有得到任何记录的原因是,您的where子句检查id_trimester,该id_trimester位于连接事件表的左侧。如果没有事件,这个字段有一个空值,所以实际上您已经通过检查它是否为1完成了一个内部连接。您需要在子查询中检查它。但是我建议使用一些类似于@JorgeCampos下面给出的代码,这样就消除了select子句中的子查询。我猜你是西班牙人,我也是,如果你不介意我用西班牙语回答的话。El id_trimester=1 me falla ya que dice que es ambiguo。在基多,我的职能没有改变结果,这是一个0。我是萨尔塔岛上的一员,没有什么特别之处:S@AlonsoGonzálezNestal-如果qua.media为null,则可以使用IFNULL(qua.media,0)获得0的值。此时,在sqlfiddle上进行数据采样会很好。我认为这是因为事件中缺少值(因为它是一个左连接),而这
qua.id\u trimester=incents.id\u trimester
导致了这样的问题。也许你会像最初发布的那样使用subselect返回到旧的select,也许它会起作用。但是为了更好地帮助你,最好有sqlfiddle。别担心@JorgeCampos完成了95%的工作,值得表扬。