Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何除以两个计数语句?获取错误_Mysql_Powerschool - Fatal编程技术网

Mysql 如何除以两个计数语句?获取错误

Mysql 如何除以两个计数语句?获取错误,mysql,powerschool,Mysql,Powerschool,我试图用礼物总数除以天数总数。Count语句是分开工作的,但是当我尝试划分这两个计数时,报告不会运行。有什么想法吗 ((SELECT COUNT(*) FROM ATTENDANCE LEFT OUTER JOIN ATTENDANCE_CODE ON ATTENDANCE_CODE.ID = ATTENDANCE.ATTENDANCE_CODEID LEFT OUTER JOIN PERIOD ON PERIOD.ID = ATTENDANCE.

我试图用礼物总数除以天数总数。Count语句是分开工作的,但是当我尝试划分这两个计数时,报告不会运行。有什么想法吗

((SELECT COUNT(*)
FROM ATTENDANCE
    LEFT OUTER JOIN ATTENDANCE_CODE
        ON ATTENDANCE_CODE.ID = ATTENDANCE.ATTENDANCE_CODEID
    LEFT OUTER JOIN PERIOD
        ON PERIOD.ID = ATTENDANCE.PERIODID
WHERE ATTENDANCE.STUDENTID = STUDENTS.ID
AND ATTENDANCE.ATT_DATE BETWEEN '%param1%' AND '%param2%'
AND PERIOD.PERIOD_NUMBER BETWEEN '1' AND '8'
AND ATTENDANCE.ATT_MODE_CODE = 'ATT_ModeMeeting'
AND ATTENDANCE.SCHOOLID = STUDENTS.SCHOOLID
AND ATTENDANCE_CODE.ATT_CODE = 'LZP'
)/
(SELECT COUNT(*)
FROM ATTENDANCE
    LEFT OUTER JOIN ATTENDANCE_CODE
        ON ATTENDANCE_CODE.ID = ATTENDANCE.ATTENDANCE_CODEID
    LEFT OUTER JOIN PERIOD
        ON PERIOD.ID = ATTENDANCE.PERIODID
WHERE ATTENDANCE.STUDENTID = STUDENTS.ID
AND ATTENDANCE.ATT_DATE BETWEEN '%param1%' AND '%param2%'
AND PERIOD.PERIOD_NUMBER BETWEEN '1' AND '8'
AND ATTENDANCE.ATT_MODE_CODE = 'ATT_ModeMeeting'
AND ATTENDANCE.SCHOOLID = STUDENTS.SCHOOLID
AND (ATTENDANCE_CODE.ATT_CODE = 'A' or ATTENDANCE_CODE.ATT_CODE = 'LZA' or ATTENDANCE_CODE.ATT_CODE = 
'LZP') 
))

您需要
选择该除法的结果。在分母中使用
NULLIF()
也是一个好主意,以避免潜在的零除错误

SELECT
    (SELECT COUNT(*)
    FROM ATTENDANCE
        LEFT OUTER JOIN ATTENDANCE_CODE
            ON ATTENDANCE_CODE.ID = ATTENDANCE.ATTENDANCE_CODEID
        LEFT OUTER JOIN PERIOD
            ON PERIOD.ID = ATTENDANCE.PERIODID
    WHERE ATTENDANCE.STUDENTID = STUDENTS.ID
    AND ATTENDANCE.ATT_DATE BETWEEN '%param1%' AND '%param2%'
    AND PERIOD.PERIOD_NUMBER BETWEEN '1' AND '8'
    AND ATTENDANCE.ATT_MODE_CODE = 'ATT_ModeMeeting'
    AND ATTENDANCE.SCHOOLID = STUDENTS.SCHOOLID
    AND ATTENDANCE_CODE.ATT_CODE = 'LZP'
    )/
    NULLIF((SELECT COUNT(*)
    FROM ATTENDANCE
        LEFT OUTER JOIN ATTENDANCE_CODE
            ON ATTENDANCE_CODE.ID = ATTENDANCE.ATTENDANCE_CODEID
        LEFT OUTER JOIN PERIOD
            ON PERIOD.ID = ATTENDANCE.PERIODID
    WHERE ATTENDANCE.STUDENTID = STUDENTS.ID
    AND ATTENDANCE.ATT_DATE BETWEEN '%param1%' AND '%param2%'
    AND PERIOD.PERIOD_NUMBER BETWEEN '1' AND '8'
    AND ATTENDANCE.ATT_MODE_CODE = 'ATT_ModeMeeting'
    AND ATTENDANCE.SCHOOLID = STUDENTS.SCHOOLID
    AND (ATTENDANCE_CODE.ATT_CODE = 'A' or ATTENDANCE_CODE.ATT_CODE = 'LZA' or ATTENDANCE_CODE.ATT_CODE = 
    'LZP') 
    ), 0)
看看这两个子查询,它们非常相似,我想知道整个事情是否可以简化为:

SELECT AVG(ATTENDANCE_CODE.ATT_CODE = 'LZP')
FROM ATTENDANCE
LEFT OUTER JOIN ATTENDANCE_CODE
    ON ATTENDANCE_CODE.ID = ATTENDANCE.ATTENDANCE_CODEID
LEFT OUTER JOIN PERIOD
    ON PERIOD.ID = ATTENDANCE.PERIODID
WHERE 
    ATTENDANCE.STUDENTID = STUDENTS.ID
    AND ATTENDANCE.ATT_DATE BETWEEN '%param1%' AND '%param2%'
    AND PERIOD.PERIOD_NUMBER BETWEEN '1' AND '8'
    AND ATTENDANCE.ATT_MODE_CODE = 'ATT_ModeMeeting'
    AND ATTENDANCE.SCHOOLID = STUDENTS.SCHOOLID
    AND ATTENDANCE_CODE.ATT_CODE IN ('LZP', 'LZA', 'A')

不要选择两个
查询,而是使用一个查询,对不同的条件求和,然后将它们分开

SELECT SUM(ATTENDANCE_CODE.ATT_CODE = 'LZP') / SUM(ATTENDANCE_CODE.ATT_CODE IN ('A', 'LZA', 'LZP') AS attendance_ratio
FROM ATTENDANCE
INNER JOIN ATTENDANCE_CODE
    ON ATTENDANCE_CODE.ID = ATTENDANCE.ATTENDANCE_CODEID
INNER JOIN PERIOD
    ON PERIOD.ID = ATTENDANCE.PERIODID
WHERE ATTENDANCE.STUDENTID = STUDENTS.ID
AND ATTENDANCE.ATT_DATE BETWEEN '%param1%' AND '%param2%'
AND PERIOD.PERIOD_NUMBER BETWEEN '1' AND '8'
AND ATTENDANCE.ATT_MODE_CODE = 'ATT_ModeMeeting'
AND ATTENDANCE.SCHOOLID = STUDENTS.SCHOOLID

另外,看起来您不应该在这里使用
左外连接<代码>考勤\u代码ID
周期ID
似乎是外键,它们应该总是在父表中找到匹配项。

这不起作用,不确定是否是因为我还有其他查询。上面是学生信息。我添加了“()”来解决这个问题,但仍然没有得出结果。谢谢你的努力!顶部似乎起了作用,但它给了我百分之一的折扣。因此,对于100%,我得到0.1,对于92,我得到9.247843002942(继续),不遵循代码中的无小数规则。有什么想法吗?非常感谢你!当我添加一个*100来解决这个问题时,它只适用于0.1,任何其他数字都不会更新