sqlite 是否可以对CONDITION进行计数,并将NULL以及其他值作为0包括在内?

7vux5j2d  于 2022-12-04  发布在  SQLite
关注(0)|答案(2)|浏览(158)

我遇到了一个问题。它包含了对状态为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),(三公子,空,空,空);

vbkedwbf

vbkedwbf1#

SELECT s.name,COUNT(DISTINCT exercise_id)FROM学生的左联接传输t在s.id上=t.学生标识AND状态= 1按学生标识分组

vfhzx4xs

vfhzx4xs2#

EDITED,因为您已指定预期结果。您可以将FILTER子句加入至汇总函数COUNT(),以便只计算符合筛选条件的数据列:

SELECT name, 
       COUNT(DISTINCT exercise_id) FILTER (WHERE status=1) as exercise_count
FROM students
GROUP BY student_id
ORDER BY exercise_count DESC

Here是对您提供的值的一种篡改
我的查询没有考虑您在答案中使用的表transmissions,因为您没有指定它的结构或它包含的内容,但您可以根据真实的需要调整答案。

相关问题