【问题标题】:count of students in each class while listing class names [closed]列出班级名称时每个班级的学生人数[关闭]
【发布时间】:2023-03-25 05:15:02
【问题描述】:

我有两张桌子,

classes
students

每个学生记录在students 表中都有一个映射记录(比如说class_id),以便映射哪个学生属于哪个班级,现在我想列出所有班级记录以及与之关联的学生人数那个班级。

请提供建议/解决方案。

我确定有可用的解决方案,我尝试了我的搜索技巧,但没有运气,任何现有的问题/答案都会是一个快速而巨大的帮助。

【问题讨论】:

  • 你应该发布你的尝试而不是寻求解决方案
  • 你考虑过复习你的讲义和教科书吗?提示:有一个名为 COUNT() 的标准聚合函数可以提供帮助。
  • 当然有解决方案,但我们不是来提供代码,我们是来帮助你的你的 代码。做一些研究,尝试一下,如果不起作用,请来询问具体问题。
  • 感谢@JohnBollinger

标签: sql postgresql


【解决方案1】:

设置(见SqlFiddle):

create table classes (class_id int primary key, class_name text);
create table students (student_id int primary key, class_id int references classes);
insert into classes
select i, 'Class'|| i
from generate_series (1, 5) i;

insert into students
select i, floor(random()* 5+ 1)::int
from generate_series (1, 20) i;

在连接表上使用count()

select class_id, class_name, count(student_id)
from classes c
join students s using(class_id)
group by 1, 2
order by 1

【讨论】:

  • 谢谢@klin,你太棒了:)
  • 我尝试了同样的方法加入另一个表,比如老师,所以每个班级的行都应该从学生表中获取学生总数,从教师表中获取教师数,但是计数并没有真正正常工作,它两个计数都返回相同的值,请提供任何帮助
  • 您不能在一级查询中这样做,必须使用子查询,请参阅fiddle
  • 注意 - 我已将 left 添加到 join 以防没有教师(学生)加入其中一门课程(如示例中所示)。
猜你喜欢
  • 2012-09-02
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
相关资源
最近更新 更多