當結果(本例中爲lessons.classDate)不存在時,試圖阻止此查詢返回NULL。我確信COALESCE應該被包裹起來,但是我不能正確地理解語法。嵌套查詢中的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);
哪個數據庫引擎? – maSTAShuFu
這就是爲什麼你使用isnull(field,1) – maSTAShuFu
你正在使用哪些DBMS? –