gpt4 book ai didi

mysql - SQL组函数

转载 作者:行者123 更新时间:2023-11-29 22:05:44 25 4
gpt4 key购买 nike

我试图使用 SUM() 来获取三列的计数,当我执行查询时,它显示“#1111 - 组函数的无效使用”。我尝试更正组函数,即使它显示错误。

我需要第 2,3,4 列的完美计数

SELECT c.name, 

SUM(CASE WHEN COUNT(distinct cmc.id) = COUNT(distinct ccc.id) THEN 1 ELSE 0 END) AS "COND1",
SUM(CASE WHEN COUNT(distinct cmc.id) > 0 AND COUNT(distinct cmc.id) != COUNT(distinct ccc.id) THEN 2 ELSE 0 END) AS "COND2",
SUM(CASE WHEN COUNT(distinct cmc.id) = 0 THEN 3 ELSE 0 END) AS "COND3"

FROM
lesson_modules_completion cmc
INNER JOIN lesson_modules cm ON cmc.lessonmoduleid = cm.id
INNER JOIN lesson_completion_settings ccc ON cm.lesson = ccc.lesson
INNER JOIN lesson c ON cm.lesson = c.id
INNER JOIN user u ON u.id = cmc.userid
WHERE ccc.criteriatype=4
GROUP BY c.name

我需要每个类(class)的每个用户已完成的模块、正在处理的模块和未启动的模块的计数,其中通过从表 CM 中获取 courseia 来从表 CC 中获取用户 ID 的计数,获取用户从每个类(class)已完成的模块数当然。

(一门类(class)可以有多个模块,并且一门类(class)可以有多个用户尝试过所有模块、几个模块或根本没有尝试过)。

所以,我需要一定数量的用户 - 已经完成了一定数量的模块 - 在类(class)中。 (3个逻辑)

(COND1 即,Completed.Users ):如果尝试的模块数量等于表 CMS 中的 modinstance 数量(例如:每个类(class)用户尝试的模块数量 = 9,则 no.modinstance = 9。因为 7不等于9,完成。)

(COND2 即 Inprocess.Users ) :尝试的模块数量应 >0,但不等于 [count(modinstance) 每门类(class)](例如:每门类(class)用户尝试的模块数量= 7 ,否.modinstance = 9。因为 7 不等于 9,所以它们是进程中的。)

(COND2 即 Nostart.Users ):尝试的模块数量应等于 0,(例如:每个类(class)用户尝试的模块数量 = 0。它们未启动)。

你可以引用我的查询,一切都很好,但我需要 COND1、COND2、COND3 的计数

我需要输出:

 lesson        COND1              COND2                  COND3
5 65 32 6
6 40 12 15
8 43 56 0
9 0 7 9

最佳答案

select lesson,sum(COND1) as COND1, sum(COND2) as COND2,sum(COND3) as COND3
from
(
SELECT c.name,
ccc.lesson,
CASE WHEN COUNT(distinct cmc.id) = COUNT(distinct ccc.id) THEN 1 ELSE 0 END AS "COND1",
CASE WHEN COUNT(distinct cmc.id) > 0 AND COUNT(distinct cmc.id) != COUNT(distinct ccc.id) THEN 2 ELSE 0 END AS "COND2",
CASE WHEN COUNT(distinct cmc.id) = 0 THEN 3 ELSE 0 END AS "COND3"

FROM
lesson_modules_completion cmc
INNER JOIN lesson_modules cm ON cmc.lessonmoduleid = cm.id
INNER JOIN lesson_completion_settings ccc ON cm.lesson = ccc.lesson
INNER JOIN lesson c ON cm.lesson = c.id
INNER JOIN user u ON u.id = cmc.userid
WHERE ccc.criteriatype=4
GROUP BY c.name,ccc.lesson
) t
group by lesson

关于mysql - SQL组函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32164640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com