Mysql 左关节聚合中的SQL计数?
我有四张桌子,如下图所示 我想统计一下有多少学生的状态为“v”在表格提交中,有多少学生的提交类型为“1”,并按学生id进行分组,因此在最后一个表格中,我可以得到这样的表格Mysql 左关节聚合中的SQL计数?,mysql,sql,database,Mysql,Sql,Database,我有四张桌子,如下图所示 我想统计一下有多少学生的状态为“v”在表格提交中,有多少学生的提交类型为“1”,并按学生id进行分组,因此在最后一个表格中,我可以得到这样的表格 select p.id, (SELECT count(*) FROM (select b.id from student as a , submission as b WHERE a.id = b.student_id and b.id_submission_type =1 and a.status_n='v' and
select p.id, (SELECT count(*) FROM (select b.id from student as a , submission as b WHERE a.id = b.student_id and b.id_submission_type =1 and a.status_n='v' and a.id_academic_programe = p.id GROUP BY b.student_id) ) from academic_programe as p
我尝试过这样的sql查询
select p.id, (SELECT count(*) FROM (select b.id from student as a , submission as b WHERE a.id = b.student_id and b.id_submission_type =1 and a.status_n='v' and a.id_academic_programe = p.id GROUP BY b.student_id) ) from academic_programe as p
但请告诉我错误
1054-where子句中的未知列“p.id”
有什么建议吗?对不起,我的英语相关性不能在嵌套子查询中。幸运的是,这很容易解决:
select p.id,
(select count(*)
from student st join
submission su
on st.id = su.student_id and
su.id_submission_type = 1 and
st.status_n = 'v' and
where st.id_academic_programe = p.id
)
from academic_programe p;
相关性不能位于嵌套子查询中。幸运的是,这很容易解决:
select p.id,
(select count(*)
from student st join
submission su
on st.id = su.student_id and
su.id_submission_type = 1 and
st.status_n = 'v' and
where st.id_academic_programe = p.id
)
from academic_programe p;
试试这个:
select c.academic_program_name,count(a.distinct student_name) as count
from
(select * from student where status = 'v') a
inner join
(select * from submission id_submission_type=1) b
on a.id =b.student_id
inner join
academic_program_name c
on a.id_academic_programe = c.id
group by c.academic_program_name;
如果有任何疑问,请告诉我。尝试以下方法:
select c.academic_program_name,count(a.distinct student_name) as count
from
(select * from student where status = 'v') a
inner join
(select * from submission id_submission_type=1) b
on a.id =b.student_id
inner join
academic_program_name c
on a.id_academic_programe = c.id
group by c.academic_program_name;
如果有任何疑问,请告诉我。请尝试以下方法
SELECT student.id,
student_name,
academic_program_name AS Programe,
COUNT( status_n ) AS status_n_count
FROM student
JOIN Submission ON student.id = Submission.student_id
RIGHT JOIN academic_program ON student.id_academic_programe = academic_program.id
WHERE id_submission_type = 1
AND status_n = 'v'
GROUP BY student.id,
student_name,
academic_program_name;
此语句首先连接学生
和提交
,以获得包含学生
id、学生姓名
、状态
和id提交类型
字段的表。然后将其右连接
ed以形成一个表格,其中列出了每个学术课程以及每个学生的详细信息,并且仍然列出了没有学生的课程
根据您的标准,使用WHERE
子句、GROUP
ed和SELECT
ed对结果数据集进行细化
如果您有任何问题或意见,请随时发表相应的意见。请尝试以下内容
SELECT student.id,
student_name,
academic_program_name AS Programe,
COUNT( status_n ) AS status_n_count
FROM student
JOIN Submission ON student.id = Submission.student_id
RIGHT JOIN academic_program ON student.id_academic_programe = academic_program.id
WHERE id_submission_type = 1
AND status_n = 'v'
GROUP BY student.id,
student_name,
academic_program_name;
此语句首先连接学生
和提交
,以获得包含学生
id、学生姓名
、状态
和id提交类型
字段的表。然后将其右连接
ed以形成一个表格,其中列出了每个学术课程以及每个学生的详细信息,并且仍然列出了没有学生的课程
根据您的标准,使用WHERE
子句、GROUP
ed和SELECT
ed对结果数据集进行细化
如果您有任何问题或意见,请随时发表相应的意见。谢谢您的回复,该代码是有效的,但我只想计算一个学生id,尽管他们提交了多个提交。在我的表格提交中,学生可以多次提交同一类型的提交。你知道我怎么做吗?我希望该组具有学生id。@eniac05。在子查询中使用
count(不同的su.student\u id)
,而不是count(*)
。感谢您的回复,该代码是有效的,但我希望只计算一个student\u id,尽管他们提交了多个提交。在我的表格提交中,学生可以多次提交同一类型的提交。你知道我怎么做吗?我希望该组具有学生id。@eniac05。在子查询中使用count(不同的su.student\u id)
,而不是count(*)
。