나는이 쿼리를 고수하고있어 손을 잡고 싶습니다.두 개의 COUNT 및 GROUP BY
그래서 두 개의 테이블이 있습니다 : 코스와 부재.
내 검색어의 목적은 한 학년에 대해 각 달의 모든 과목과 결석을 계산하는 것입니다.
SELECT DATE_FORMAT(c.date, "%M") AS month,
COUNT(*) AS courses
FROM Course c
GROUP BY month
ORDER BY MONTH(c.date);
결과는 다음과 같습니다 : 단지 코스
,이 쿼리가
+-----------+--------+
| month | courses|
+-----------+--------+
| January | 24 |
| February | 20 |
| March | 20 |
| April | 22 |
| May | 23 |
| June | 20 |
| July | 23 |
| August | 22 |
| September | 20 |
| October | 23 |
| November | 23 |
| December | 21 |
+-----------+--------+
내가 정확히 코스처럼 새 열을하고 싶은,하지만 결석했다.
내 부재의 열은 다음과 같습니다 ID, USER_ID는 는, 이유를 Course_ID에
그래서,이 카운트 부재로하여 코스 그룹을 사용할 수 있습니다 정당화?
그렇다면 어떻게됩니까? 사전에
감사합니다,
이편집 : 지금이 쿼리가
:
SELECT a.month, a.courses, b.absences
FROM (SELECT DATE_FORMAT(c.DATE, "%M") AS month,
COUNT(*) AS courses
FROM Course c
GROUP BY month) a
INNER JOIN (SELECT DATE_FORMAT(c.date, "%M") AS month,
COUNT(*) AS absences
FROM Absence a
LEFT JOIN Course c
ON a.course_id = c.id
GROUP BY month) b
ON a.month = b.month;
그리고 그 결과는 다음과 같습니다
+----------+---------+----------+
| month | courses | absences |
+----------+---------+----------+
| November | 23 | 2 |
| October | 23 | 1 |
+----------+---------+----------+
숫자는 좋다, 그러나 때 결석은 없으며 코스는 표시되지 않습니다. 결석에 0을 부여하는 방법이 있습니까?
편집 2 :이 작업 쿼리입니다
:
SELECT a.month, a.courses, b.absences
FROM (SELECT DATE_FORMAT(c.DATE, "%M") AS month,
COUNT(*) AS courses
FROM Course c
GROUP BY month) a
LEFT JOIN (SELECT DATE_FORMAT(c.date, "%M") AS month,
COUNT(*) AS absences
FROM Absence a
LEFT JOIN Course c
ON a.course_id = c.id
GROUP BY month) b
ON a.month = b.month;
모든 학생에게 보시겠습니까? 아니면 학생 ID를 매개 변수로 제공 하시겠습니까? –