我很想做这样的事情,但是当然要有一个有效的语法:)

MIN(CASE WHEN col=2
THEN CASE WHEN answer IS NULL THEN 0 ELSE answer END END)

我试图阻止视图获取空值,并使用零代替。
以下是创建视图的我的选择查询:
SELECT result,question_id,
MIN(CASE WHEN col=1
THEN answer
END) AS col1,
MIN(CASE WHEN col=2
THEN answer
END) AS col2,
MIN(CASE WHEN col=3
THEN answer
END) AS col3
FROM answers
GROUP by result,question_id

基本上我得到了一个很好的结果
result   question_id   col1   col2   col3
1            2          10     20      70
2            2          80     20     NULL
3            3          0     100       0

我没有任何性能问题,并且原始表定期更新,这就是为什么我希望保留视图而不是sp。您看到的表分散了一个调查概率的关系结构。每行的cols加起来必须是100。如果有人真的确定不会发生col3之类的事情,他可以在其他表单字段中填写0,或者将该字段留空。表单验证器只在所有值加起来为100时进行检查。如果该字段留空,则关系表中没有条目,因此分散视图将写入空值。
我很想让它写一个“0”,但我不知道怎么写!任何建议请提前通知!

最佳答案

您正在查找IFNULL(..something...,0)
显然得说清楚:

IFNULL(MIN(CASE WHEN col=3 THEN answer END),0)

关于mysql - 在mysql View 中防止NULL,去规范化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3265220/

10-11 07:21