Mysql 带有GROUP BY的SQL JOIN语句
问题是: 构造SQL语句以查找每次会议的与会者人数。显示以下列:Mysql 带有GROUP BY的SQL JOIN语句,mysql,sql,Mysql,Sql,问题是: 构造SQL语句以查找每次会议的与会者人数。显示以下列: 出席会议人数 会议ID 会议开始日期和时间 会议结束日期和时间 该数据库中有5个表(人员、建筑物、房间、会议、人员会议) +-----------+------------+------------+ | person_id | first_name | last_name | +-----------+------------+------------+ | 1 | Tom | Hanks
- 出席会议人数
- 会议ID
- 会议开始日期和时间
- 会议结束日期和时间
+-----------+------------+------------+
| person_id | first_name | last_name |
+-----------+------------+------------+
| 1 | Tom | Hanks |
| 2 | Anne | Hathaway |
| 3 | Tom | Cruise |
| 4 | Meryl | Streep |
| 5 | Chris | Pratt |
| 6 | Halle | Berry |
| 7 | Robert | De Niro |
| 8 | Julia | Roberts |
| 9 | Denzel | Washington |
| 10 | Melissa | McCarthy |
+-----------+------------+------------+
+-------------+----------------------+
| building_id | building_name |
+-------------+----------------------+
| 1 | Headquarters |
| 2 | Main Street Buidling |
+-------------+----------------------+
+---------+-------------+-------------+----------+
| room_id | room_number | building_id | capacity |
+---------+-------------+-------------+----------+
| 1 | 100 | 1 | 5 |
| 2 | 200 | 1 | 4 |
| 3 | 300 | 1 | 10 |
| 4 | 10 | 2 | 4 |
| 5 | 20 | 2 | 4 |
+---------+-------------+-------------+----------+
+------------+---------+---------------------+---------------------+
| meeting_id | room_id | meeting_start | meeting_end |
+------------+---------+---------------------+---------------------+
| 1 | 1 | 2016-12-25 09:00:00 | 2016-12-25 10:00:00 |
| 2 | 1 | 2016-12-25 10:00:00 | 2016-12-25 12:00:00 |
| 3 | 1 | 2016-12-25 11:00:00 | 2016-12-25 12:00:00 |
| 4 | 2 | 2016-12-25 09:00:00 | 2016-12-25 10:00:00 |
| 5 | 4 | 2016-12-25 09:00:00 | 2016-12-25 10:00:00 |
| 6 | 5 | 2016-12-25 14:00:00 | 2016-12-25 16:00:00 |
+------------+---------+---------------------+---------------------+
+-----------+------------+
| person_id | meeting_id |
+-----------+------------+
| 1 | 1 |
| 10 | 1 |
| 1 | 2 |
| 2 | 2 |
| 3 | 2 |
| 4 | 2 |
| 5 | 2 |
| 6 | 2 |
| 7 | 2 |
| 8 | 2 |
| 9 | 3 |
| 10 | 3 |
| 1 | 4 |
| 2 | 4 |
| 8 | 5 |
| 9 | 5 |
| 1 | 6 |
| 2 | 6 |
| 3 | 6 |
+-----------+------------+
我的SQL语句:
SELECT Count(person_id) AS “Count of meeting attendees” ,meeting_id,meeting_start,meeting_end
FROM meeting M ,person_meeting PM
WHERE M. meeting_id=PM. meeting_id
Group by PM.meeting_id,M.meeting_start,M.meeting_end;
我得到的错误是:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'of meeting attendees” ,meeting_id,meeting_start,meet
ing_end
FROM meeting M ' at line 1
请帮助我,我不确定我做错了什么。我无法找到解决此问题的方法。切勿在FROM
子句中使用逗号。请始终使用正确、明确、标准的连接
语法
不要给列提供需要转义的别名。所以,请使用下划线而不是空格。这可以解决您使用奇怪的双引号字符的问题:
SELECT COUNT(pm.person_id) AS num_attendees,
m.meeting_id, m.meeting_start, m.meeting_end
FROM meeting m JOIN
person_meeting PM
ON m.meeting_id = pm.meeting_id
GROUP BY m.meeting_id, m.meeting_start, m.meeting_end ;
根据错误文本,我会尝试将COUNT()列的名称更改为“COUNT”,因为错误消息在列名的第一个空格之后开始 编辑: 我还将支持戈登·林诺夫的发言: 永远不要这样做:
FROM tbla a, tblb b
WHERE a.columna = b.columnb
这是一个常规的旧联接,应该这样写:
FROM tbla A
JOIN tblb B ON a.columna = b.columnb
有两件事可以更改。第一个meeting_id列属于这两个表,因此您必须定义哪个表的列。然后,根据您提供的错误描述,列命名必须有错误
SELECT Count(person_id) AS "Count" ,M.meeting_id,meeting_start,meeting_end
FROM meeting M
INNER JOIN person_meeting PM ON M.meeting_id=PM.meeting_id
Group by M.meeting_id,M.meeting_start,M.meeting_end;
您可以从使用ANSI连接开始。。。。