选择isnull()为false的列

时间:2016-03-07 11:18:08

标签: mysql

我有一个查询,当我直接通过我的MySQL管理器运行它时,但查询似乎在我的应用程序中不起作用。

我已将问题确定为以下查询:

SELECT task_id, member_id, SUM(NOT(ISNULL(completion_date))) AS complete, COUNT(id) AS total
FROM classroom_task_data
GROUP BY task_id, member_id

,特别是SUM(NOT(ISNULL(completion_date)))

如果我将其更改为SUM(ISNULL(completion_date))(已移除NOT),则查询将在我的应用程序中生效。我不知道为什么会这样,但我想我也可以尝试不同的方法来获得我想要的结果。

我也试过SUM(NOT ISNULL(completion_date)),但没有成功。我也测试了COALESCE,但我无法让它工作。

所以我想知道如何以不同的方式写上面的内容,但仍能得到相同的结果。

这是完整的查询btw:

SELECT id, title, member_id, instruction, start_date, end_date, is_archived, is_published, classroom_id, user_id 
FROM (
   SELECT task_id, member_id, SUM(NOT(ISNULL(completion_date))) AS complete, COUNT(id) AS total
   FROM classroom_task_data GROUP BY task_id, member_id
)
AS td 
JOIN
classroom_tasks AS t ON td.task_id = t.id
WHERE complete = total AND classroom_id = 35;

3 个答案:

答案 0 :(得分:1)

if语句会给出相同的结果。

当completion_date为空时

-0

当completion_date为非空时

-1

SUM( if(completion_date IS NULL, 0, 1)) AS complete

也许你可以试试

答案 1 :(得分:0)

尝试IS NOT NULL:

chan

答案 2 :(得分:0)

如果它们不为null,则将它们汇总为completion_date,否则将其添加为零。

COALESCE(SUM(completion_date),0)
相关问题