select t1.course_id,course_name,round(attend_cnt*100/application_cnt,2) from ( select course_id,count(distinct user_id) application_cnt from behavior_tb where if_sign=1 group by course_id ) t1 join ( select course_id,count(distinct user_id) attend_cnt from attend_tb where timestampdiff(minute,in_datetime,out_datetime)>=10 group by course_id ) t2 join (course_tb) using(course_id) group by t1.course_id代码报错
时间: 2024-03-10 08:48:24 浏览: 68
attend-personal.rar_personal_排班_考勤 排班
5星 · 资源好评率100%
感谢您的反馈,这个 SQL 查询语句可能报错的原因可能是因为 join 语句缺少 on 子句,导致无法正确连接表。您可以尝试修改一下查询语句,添加 on 子句,如下所示:
```
SELECT t1.course_id, course_name, ROUND(attend_cnt*100/application_cnt, 2)
FROM
(
SELECT course_id, COUNT(DISTINCT user_id) application_cnt
FROM behavior_tb
WHERE if_sign = 1
GROUP BY course_id
) t1
JOIN
(
SELECT course_id, COUNT(DISTINCT user_id) attend_cnt
FROM attend_tb
WHERE TIMESTAMPDIFF(MINUTE, in_datetime, out_datetime) >= 10
GROUP BY course_id
) t2 ON t1.course_id = t2.course_id
JOIN course_tb USING(course_id)
GROUP BY t1.course_id;
```
这个查询语句在 join 语句中添加了 on 子句,将 t1 和 t2 临时表连接的条件指定为它们的 course_id 相等。同时,使用了 USING 子句来简化代码,将 course_tb 表的 course_id 字段与 t1 和 t2 表中的 course_id 字段进行连接。
希望这次能够帮助您解决问题。
阅读全文