각 사용자의 "Total Inservice Hours"를 합산하려고하는데 모든 시도에서 "Error Code : 1111. Invalid use of group function"이 표시됩니다. 한 가지 시도는 "Total Inservice Hours"필드 주위에 SUM ()을 래핑 한 다음 u.id별로 그룹화하는 것입니다.
내 SQL은 다음과 같습니다.
SELECT u.id,"Name",
atstat.grade,IFNULL(c.total_ceus,0) as max_ceus,c.id as courseid,atsess.id as sessid, count(c.total_ceus) as numsess, IFNULL(ROUND(((SUM(grade)/count(c.total_ceus))*total_ceus)/100,2),0) as "Total Inservice Hours"
FROM mdl_user u,mdl_course c
JOIN mdl_course_modules cm ON c.id = cm.course
JOIN mdl_attendance_sessions atsess ON cm.instance = atsess.attendanceid
JOIN mdl_attendance_log atlog ON atlog.sessionid = atsess.id
JOIN mdl_attendance_statuses atstat ON atstat.id = atlog.statusid
WHERE u.id = atlog.studentid AND (u.id = 3882) AND c.total_ceus > 0
GROUP by u.id,c.id
ORDER BY u.id DESC LIMIT 300
다음은 해당 쿼리의 결과입니다.
GROUP BY u.id를 시도했지만 다음 결과를 얻었습니다.
내가 정말로 신경 쓰는 유일한 필드는 u.id와 Total Inservice Hours입니다. 나머지는 디버깅을위한 것입니다.
원하는 출력은 총 서비스 시간의 합계이며이 예에서는 111이됩니다.
감사!
편집 : 그룹 함수 오류 SQL의 잘못된 사용 :
SELECT u.id,"Name",
atstat.grade,IFNULL(c.total_ceus,0) as max_ceus,c.id as courseid,atsess.id as sessid, count(c.total_ceus) as numsess, SUM(IFNULL(ROUND(((SUM(grade)/count(c.total_ceus))*total_ceus)/100,2),0)) as "Total Inservice Hours"
FROM mdl_user u,mdl_course c
JOIN mdl_course_modules cm ON c.id = cm.course
JOIN mdl_attendance_sessions atsess ON cm.instance = atsess.attendanceid
JOIN mdl_attendance_log atlog ON atlog.sessionid = atsess.id
JOIN mdl_attendance_statuses atstat ON atstat.id = atlog.statusid
WHERE u.id = atlog.studentid AND (u.id = 3882) AND c.total_ceus > 0
GROUP by u.id
ORDER BY u.id DESC LIMIT 300
하나의 집계 함수를 다른 집계 함수로 래핑 할 수 없습니다.
열 중 하나를 합산하려면 원래 쿼리를 하위 쿼리에 넣어야합니다. ID 및 총 서비스 시간에만 관심이 있으므로 다른 SELECT
열 은 생략 할 수 있습니다.
SELECT id, SUM(`Total Inservice Hours`) AS "Total Inservice Hours"
FROM (SELECT u.id, IFNULL(ROUND(((SUM(grade)/count(c.total_ceus))*total_ceus)/100,2),0) as "Total Inservice Hours"
FROM mdl_user u,mdl_course c
JOIN mdl_course_modules cm ON c.id = cm.course
JOIN mdl_attendance_sessions atsess ON cm.instance = atsess.attendanceid
JOIN mdl_attendance_log atlog ON atlog.sessionid = atsess.id
JOIN mdl_attendance_statuses atstat ON atstat.id = atlog.statusid
WHERE u.id = atlog.studentid AND (u.id = 3882) AND c.total_ceus > 0
GROUP by u.id,c.id
ORDER BY u.id DESC LIMIT 300) AS subq
GROUP BY id
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다