【问题标题】:Selecting more after group-by while using join使用 join 时在 group-by 后选择更多
【发布时间】:2015-10-05 20:09:46
【问题描述】:

目前我正忙于两张桌子,StudentsClasses。这两个都包含一个列 project_group,这是一种将一个班级的多个学生分类为更小的组的方法。

Students 表中有一列 City 说明了学生居住的城镇/城市,从已填充的行中,已经有几个城市出现了多个次。我用来检查一个城市被显示多少次的代码是这样的:

SELECT City, count(*)
FROM Students
GROUP BY City

现在我要做的下一件事是按班级显示学生居住在哪些城市以及有多少人居住在那里,例如结果如下:

  • 一个 | - | 2
  • 一个 |纽约 | 3
  • 一个 |洛杉矶 | 1
  • B | - | 1
  • B |迈阿密 | 2
  • B |西雅图 | 1

StudentsClasses 可以在 project_group 列上相互加入,但我最感兴趣的是他同时使用 前面提到的 GROUP BY,使用 JOIN 并且还显示每个类的结果。

提前致谢, 克拉德

【问题讨论】:

  • 你用的是什么数据库?
  • 你能举一个两个表中包含的列的例子吗?具体来说,您希望将这两个表加入什么?这将帮助我编写查询,让您了解需要做什么。
  • @HART CO 我正在使用 SQL Developer。
  • @Zi0n1 在表 Classes 中有列 project_groupclass_idproject_group 用于加入 Students 表。此外,在 Students 中有列;学生证号、名字、姓氏、tussenvoegsels(这是荷兰语,tussenvoegsels 可以放在名字和姓氏之间,例如“Vincent van Gogh”中的“van”)、电子邮件、手机号码、出生日期、项目组和城市。
  • @JohnBollinger 我已经尝试过显示有多少人住在一个​​城市,请参阅我的问题中的第一个代码示例。加入表格也不是问题。问题是我不只是想展示有多少人住在一个​​城市,还要展示每个班级。当在 SELECT 中不只使用 'City, count(*)' 时会出现问题,随后的错误是:不是 GROUP BY 表达式。

标签: sql join group-by


【解决方案1】:

我不确定您的示例中 A 和 B 的列名是什么。我假设 Classes.Class 在以下:

SELECT
  C.Class
  , S.City
  , COUNT(S.*) AS Count
FROM
  Classes AS C INNER JOIN 
  Students AS S ON C.Project_Group = S.Project_Group
GROUP BY
  C.Class
  , S.City

【讨论】:

  • 由于某种原因,这似乎不起作用。我收到“SQL 命令未正确结束”错误。这可能与表之间的 project_group 拼写有所不同这一事实有关吗?在 Students 中是 project_groep,而在 Classes 中是 project_group。我不确定为什么名称不一样,并且出于显而易见的原因使用相同的拼写更好,但这可能是原因吗?内部连接的名称不必相同吗?
  • 不,名称不必相同,但您需要在连接的“ON”部分正确指明名称。您会注意到“ON”使用为每个表(C 或 S)分配的别名 - 因此,您需要将 S.Project_Group 更改为 S.Project_groep
【解决方案2】:

我设法让它工作。在进行一些测试以查看我收到的确切错误消息时,我使用了它并设法让它工作。我现在得到每个班级的概览,显示有多少人住在哪个城市。这是使用的代码。

SELECT class_id, city, count(*) AS amount
FROM students, classes
WHERE students.project_group = classes.project_group
GROUP BY class_id, city
ORDER BY class_id

【讨论】:

  • 看看昨天白雪公主提供的答案,没错。需要注意的一点是,您使用的是不推荐使用的语法,应避免使用逗号分隔 FROM 中的表名列表,白雪公主的答案使用符合标准的连接语法,因此我建议您接受该答案。
  • @HartCO SELECT class_id, city, count(*) AS amount FROM students JOIN classes ON (students.project_group = classes.project_group) GROUP BY class_id, city ORDER BY class_id 那会是更好的版本吗?
  • 是的,连接条件周围不需要(),但一点也不坏,JOIN...ON 现在是标准语法,它还有助于避免一些丑陋的情况和混乱的@涉及更多表时为 987654326@ 子句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
  • 2018-06-27
  • 2012-08-26
  • 2013-09-27
  • 1970-01-01
相关资源
最近更新 更多