首页 > 解决方案 > 使参与日期范围的小时数总和

问题描述

借助几种辅助工具,我能够做出此选择,但我需要添加小时数,而不是重复学生,并且当学生未参加该日期范围时显示零结果:

**students TABLE**

s_id
s_laname
s_mname
s_fname
s_grupo

**horas TABLE**

id
s_id
horas
fecha
grupo


SELECT students.s_lname, horas.horas 
FROM students 
LEFT JOIN horas ON students.s_id=horas.s_id 
       and horas.fecha >= '2020-11-01' 
       AND horas.fecha <= '2020-11-30' 
       AND horas.horas >'0' 
WHERE students.s_grupo IN('11')

这是我发布的选择的结果,但我需要它来计算时间的总和:

s_lname   horas 
Molina      12  
Mejías      12  
Corrales    10  
Sáenz       15  
Castro      11  
Hernandez   11  
Sáenz       12  
Hernandez   6   
Hernandez   6   
Sáenz       12  
Brizuela    NULL
Vargas      NULL
Acuña       NULL
Jiménez     NULL
López.      NULL
Jimenez     NULL
Vargas      NULL
Navarro     NULL

这将是我所需要的,有时间总和并且没有参与放置 NULL 或零的学生:

s_lname   horas 
Molina      12  
Mejías      12  
Corrales    10  
Sáenz       39  
Castro      11  
Hernandez   33
Brizuela    NULL
Vargas      NULL
Acuña       NULL
Jiménez     NULL
López       NULL
Jimenez     NULL
Vargas      NULL
Navarro     NULL

标签: mysqlsumwhere-clause

解决方案


听起来您可以添加一个不同的关键字并使用内连接而不是左连接:

编辑:根据您的结果和您想要的结果,我猜您想总结结果,如果这是真的,那么......


SELECT students.s_lname, SUM(horas.horas)
    FROM students 
    LEFT JOIN horas ON students.s_id=horas.s_id 
           and horas.fecha >= '2020-11-01' 
           AND horas.fecha <= '2020-11-30' 
           AND horas.horas >'0' 
    WHERE students.s_grupo IN('11')
    Group by students.s_id

推荐阅读