Sql 如何在联接时添加多个列?

Sql 如何在联接时添加多个列?,sql,postgresql,join,Sql,Postgresql,Join,我有两张桌子: 组:组id、组名称 学生:学生id、组id、名、姓 我想查询显示组id、组名和学生人数,但我不能添加组名。 现在我有这样的smth: public String findGroupsByStudentsNumber(int expectedStudentsNumber) { return " SELECT students.group_id, COUNT(student_id) AS Number_of_students " +

我有两张桌子:

组:组id、组名称

学生:学生id、组id、名、姓

我想查询显示组id、组名和学生人数,但我不能添加组名。 现在我有这样的smth:

public String findGroupsByStudentsNumber(int expectedStudentsNumber) {
        return " SELECT students.group_id, COUNT(student_id) AS Number_of_students " +
                "FROM students " +
                "LEFT JOIN groups ON students.group_id = groups.group_id " +
                "GROUP BY students.group_id " +
                "HAVING COUNT(student_id) <= " + expectedStudentsNumber +
                " ORDER BY students.group_id";
    }

如何在此查询中添加组名?

只需将其添加到所选列以及分组依据中即可

SELECT students.group_id, groups.group_name, COUNT(student_id) AS Number_of_students 
FROM students
LEFT JOIN groups ON students.group_id = groups.group_id 
GROUP BY students.group_id, groups.group_name
HAVING COUNT(student_id) <= " + expectedStudentsNumber
ORDER BY students.group_id
选择students.group\u id、groups.group\u name、COUNT(student\u id)作为学生人数
来自学生
在students.group\u id=groups.group\u id上左键加入组
按学生分组。分组id,分组。分组名称

让我对您的数据模型做两个假设:

  • 组。组id
    是主键
  • students.group\u id
    具有外键关系,因此它只包含有效值。虽然应该声明关系,但不需要声明
如果是这种情况,您想要的查询可能是:

select g.group_id, g.group_name, count(s.student_id) as number_of_students
from groups g left join
     students s
     on g.group_id = s.group_id
group by g.group_id
having count(s.student_id) <= ?
order by g.group_id;
选择g.group\u id、g.group\u name、count(s.student\u id)作为学生人数
从组g左连接
学生
关于g.group\u id=s.group\u id
按g.group\U id分组

让count(s.student_id)将其添加到
select
groupby
子句中。此外,问题本身与java无关,只是在java程序中使用查询(与问题本身无关)。下次请创建一个查询,在本例中,它只表示查询,没有java代码(和java标记)。或者在select clauseIt中使用max(group_name)作为group_name,这是包含示例日期和预期结果的最佳实践。学习使用参数!轻微的打字错误?“在g.group\U id=s.student\U id上”实际应该是“在g.group\U id=s.group\U id上”?@Belayer。非常感谢。
select g.group_id, g.group_name, count(s.student_id) as number_of_students
from groups g left join
     students s
     on g.group_id = s.group_id
group by g.group_id
having count(s.student_id) <= ?
order by g.group_id;