首页 > 解决方案 > SQL 查询,获取一个实体的多个日期

问题描述

我正在编写一个 SQL 查询来生成一个如下所示的表:

Name    |Dates Absent|Total Absences  
student |10/28/2018  |     2       
        |10/29/2018  | 

我目前有一个数据库,其中包含 2 个表,这些表是包含所需数据(缺勤、学生)的更大系统的一部分。

我尝试了以下查询

SELECT s.student_id,s.last_name,s.first_name, COUNT(s.student_id) AS 'Total Absences' 
FROM `students` s, `absences` a INNER JOIN students ON students.student_id=a.student_id

结果如下:

student_id | last_name | first_name | Total Absences
1          |   student |       name | 12464

我希望它只使用每个 ID 一次并计算它出现的次数。数据库中的关系问题是否存在一个人可以缺席的许多日期?出于调试目的,该 ID 暂时留在选择中,稍后将被删除。


编辑

我现在有查询

SELECT s.last_name, s.first_name,a.date_absence, COUNT(s.student_id) AS 'Total Absences' 
FROM `students` s, `absences` a 
INNER JOIN students ON students.student_id=a.student_id 
GROUP BY s.student_ID

这仅显示其中一个日期,如何添加所有日期而不重新显示学生信息?

标签: mysqlsqldatabase

解决方案


您可以使用 group_concat 执行此操作。这不是你所描述的,但它很接近。

SELECT s.student_id,s.last_name,s.first_name, group_concat(a.date_absent) AS 'Dates Absent', COUNT(a.id) AS 'Total Absences' 
FROM `students` s JOIN `absences` a ON s.student_id = a.student_id
GROUP BY s.student_id

这应该产生

student_id | last_name | first_name | Dates Absent          | Total Absences
1          |   student |       name | 10/28/2018,10/29/2018 | 2

推荐阅读