Mysql don';t在结果中显示变量
我正在尝试优化此选择,因为如果相同的选择和查询需要两次运行时间,那么:Mysql don';t在结果中显示变量,mysql,Mysql,我正在尝试优化此选择,因为如果相同的选择和查询需要两次运行时间,那么: SELECT sc.ID, (CASE WHEN (SELECT SUM(scu.OK) FROM `SCU` scu WHERE scu.ID = _ID AND scu.CCC = sc.ID GROUP BY scu.ISC)
SELECT sc.ID,
(CASE WHEN (SELECT SUM(scu.OK)
FROM `SCU` scu
WHERE scu.ID = _ID
AND scu.CCC = sc.ID
GROUP BY scu.ISC)
IS NULL THEN 0 ELSE
(SELECT SUM(scu.OK)
FROM `SCU` scu
WHERE scu.ID = _ID
AND scu.CCC = sc.ID
GROUP BY scu.ISC)
END )as 'STATUS'
FROM ( SELECT `ID`
FROM `STORE`
WHERE `STATE`=1
ORDER BY `NUMBERIN` DESC) sc
GROUP BY sc.ID;
我试过这样的东西
SELECT sc.ID,
@STATUS:=(SELECT SUM(scu.OK)
FROM `SCU` scu
WHERE scu.ID = _ID
AND scu.CCC = sc.ID
GROUP BY scu.ISC),
(CASE WHEN @STATUS
IS NULL THEN 0 ELSE @STATUS
END ) as 'STATUS'
FROM ( SELECT `ID`
FROM `STORE`
WHERE `STATE`=1
ORDER BY `NUMBERIN` DESC) sc
GROUP BY sc.ID;
但它会返回另一列,其中包含@STATUS变量,但它不应该返回。
结果应具有ID和状态列。有什么想法吗?最简单的方法是合并,它可以用来用特定的值替换空值
SELECT sc.ID,
COALESCE((SELECT SUM(scu.OK)
FROM `SCU` scu
WHERE scu.ID = _ID
AND scu.CCC = sc.ID
GROUP BY scu.ISC),0) as 'STATUS'
FROM ( SELECT `ID`
FROM `STORE`
WHERE `STATE`=1
ORDER BY `NUMBERIN` DESC) sc
GROUP BY sc.ID;
我认为您可以使用
IFNULL
执行以下操作:
SELECT sc.ID,
IFNULL(@STATUS:=(SELECT SUM(scu.OK)
FROM `SCU` scu
WHERE scu.ID = _ID
AND scu.CCC = sc.ID
GROUP BY scu.ISC),0,@STATUS) AS `STATUS`
FROM ( SELECT `ID`
FROM `STORE`
WHERE `STATE`=1
ORDER BY `NUMBERIN` DESC) sc
GROUP BY sc.ID;
这个怎么样
Select
id,
(CASE WHEN status
IS NULL THEN 0 ELSE status
END ) as 'STATUS'
from
(SELECT sc.ID,
(SELECT SUM(scu.OK)
FROM `SCU` scu
WHERE scu.ID = _ID
AND scu.CCC = sc.ID
GROUP BY scu.ISC) as status
FROM ( SELECT `ID`
FROM `STORE`
WHERE `STATE`=1
ORDER BY `NUMBERIN` DESC) sc
GROUP BY sc.ID) temp
对不起,我在智能手机上输入的。
希望它比IFNULL更有用。