각 사용자에 대해 "전체 서비스 시간"을 합산하려하지만 모든 시도에서 "오류 코드 : 1111. 그룹 기능을 잘못 사용했습니다."가 표시됩니다. 한 가지 시도는 SUM()을 "Total Inservice Hours"필드 주위에 배치 한 다음 u.id로 그룹화하는 것입니다. 여기 SUM 그룹화 된 열
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
는 해당 쿼리의 결과입니다 : 여기
내 SQL입니다
: 나는 u.id에 의해 GROUP에 시도,하지만 난이 결과를 가지고
내가 정말로 신경 쓰는 유일한 분야는 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
오류가 발생하는 쿼리를 표시하십시오. – Barmar
당신은 MySQL이 다른 데이터베이스가 오류를 반환했기 때문에 MySQL이 잘못된 것이라고 잘못 알았 기 때문에 이것은 mysql이라고 말할 수 있습니다. 일반 규칙은 선택 행에 있고 집계가 아닌 경우 group by 절에 있어야합니다. 집계를 사용하여 데이터 필드를 반환하려고하십니까? – Twelfth
@Barmar 오류를 생성 한 SQL을 게시했습니다. – rawrzors