【发布时间】:2017-04-18 21:02:06
【问题描述】:
当结果(在本例中为课程.classDate)不存在时,尝试阻止此查询返回 NULL。我确定 COALESCE 应该被环绕,但我无法正确使用语法。
SELECT FLOOR(COUNT(S0001)* 100 /
(SELECT COUNT(*) FROM stat_P01627
INNER JOIN lessons ON stat_P01627.lesson = lessons.id
INNER JOIN modules ON lessons.module = modules.id
WHERE lessons.module = 'MHG405294' AND lessons.classDate >= DATE_ADD(CURDATE(),INTERVAL -12 WEEK))
) AS stat12wkMod1
FROM attendance_P01627
INNER JOIN lessons ON stat_P01627.lesson = lessons.id
INNER JOIN modules ON lessons.module = modules.id
WHERE lessons.module = 'MHG405294' AND lessons.classDate >= DATE_ADD(CURDATE(),INTERVAL -12 WEEK);
我在尝试;
SELECT FLOOR(COUNT(S0001)* 100 /
COALESCE(SELECT COUNT(*) FROM stat_P01627
INNER JOIN lessons ON stat_P01627.lesson = lessons.id
INNER JOIN modules ON lessons.module = modules.id
WHERE lessons.module = 'MHG405294' AND lessons.classDate >= DATE_ADD(CURDATE(),INTERVAL -12 WEEK)),0)
) AS stat12wkMod1
FROM stat_P01627
INNER JOIN lessons ON stat_P01627.lesson = lessons.id
INNER JOIN modules ON lessons.module = modules.id
WHERE lessons.module = 'MHG405294' AND lessons.classDate >= DATE_ADD(CURDATE(),INTERVAL -12 WEEK);
[编辑] 工作版,适合感兴趣的人。
SELECT IFNULL(FLOOR(COUNT(S0001)* 100 /
IFNULL((SELECT COUNT(*) FROM stat_P01627
INNER JOIN lessons ON stat_P01627.lesson = lessons.id
INNER JOIN modules ON lessons.module = modules.id
WHERE lessons.module = 'MHG405294' AND lessons.classDate >= DATE_ADD(GETDATE(),INTERVAL -12 WEEK)),1)) ,1)
AS stat12wkMod1
FROM stat_P01627
INNER JOIN lessons ON stat_P01627.lesson = lessons.id
INNER JOIN modules ON lessons.module = modules.id
WHERE lessons.module = 'MHG405294' AND lessons.classDate >= DATE_ADD(GETDATE(),INTERVAL -12 WEEK);
【问题讨论】:
-
哪个数据库引擎?
-
这就是你使用 isnull(field,1) 的原因
-
您使用的是哪个 DBMS?