我遇到了一个问题。它包含了对状态为1(GROUP BY名称)的行进行计数的条件。
但是,结果应包括WHERE中不等于1和NULL的行。它们被计为0。
我已尝试cte,CASE WHEN,WHERE status = 1或status IS NULL。它确实包含null作为0,但存在包含1和0或仅包含0的名称。
如果我使用WHERE status IS NULL OR status=1,则状态为0的名称不计算在内。
如果使用CASE WHEN状态为NULL,则为0
WHEN status IS 0 THEN 0
WHEN status = 1 THEN COUNT(DISTINCT name)
则包含1 AND 0的名称将计为0。
表格:
插入学生(姓名,学生标识,练习标识,状态)VALUES(乌列维,1,1,0),(乌列维,1,1,0),(乌列维,1,1,1),(乌列维,1,2,0),(乌列维,1,2,0),(乌列维奇,1,2,1),(迈贾,2,1,1),(舞伎,2,2,1),(舞伎,2,2,1),(舞伎,2,2,1),(舞伎,2,3,0),(舞伎,3,1,0),(舞伎,3,2,0),(舞伎,3,3,0),(三公子,空,空,空);
2条答案
按热度按时间vbkedwbf1#
SELECT s.name,COUNT(DISTINCT exercise_id)FROM学生的左联接传输t在s.id上=t.学生标识AND状态= 1按学生标识分组
vfhzx4xs2#
EDITED,因为您已指定预期结果。您可以将FILTER子句加入至汇总函数COUNT(),以便只计算符合筛选条件的数据列:
Here是对您提供的值的一种篡改
我的查询没有考虑您在答案中使用的表
transmissions
,因为您没有指定它的结构或它包含的内容,但您可以根据真实的需要调整答案。