mysql - 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
这仅显示其中一个日期,如何添加所有日期而不重新显示学生信息?
解决方案
您可以使用 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
推荐阅读
- java - 在 intellij 中 Main 是不可接受的
- java - 将包含属性值的 XML 转换为 Java 对象时出错
- javascript - Microsoft Teams 中自定义选项卡的新 SSO
- java - PropertyUtils.setIndexedProperty() throws 在 bean 类 'class beans.MyBean' 上没有 getter 方法
- oracle - 如何在 PL/SQL 中将逗号分隔的负值转换为数组?
- android - Android Q:java.io.FileNotFoundException:/proc/self/net/dev:打开失败:EACCES(权限被拒绝)
- python - 在 python spyne 中为状态提供服务(如数据库连接)
- ios - 按下一个按钮,然后可以触摸屏幕并从(起点)拖动一个空心矩形,直到您松开(终点)
- json - 如何在颤动电子商务应用程序中将产品项目添加到购物车
- javascript - 当它可见时如何启动此动画?