Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 带有GROUP BY的SQL JOIN语句_Mysql_Sql - Fatal编程技术网

Mysql 带有GROUP BY的SQL JOIN语句

Mysql 带有GROUP BY的SQL JOIN语句,mysql,sql,Mysql,Sql,问题是: 构造SQL语句以查找每次会议的与会者人数。显示以下列: 出席会议人数 会议ID 会议开始日期和时间 会议结束日期和时间 该数据库中有5个表(人员、建筑物、房间、会议、人员会议) +-----------+------------+------------+ | person_id | first_name | last_name | +-----------+------------+------------+ | 1 | Tom | Hanks

问题是:

构造SQL语句以查找每次会议的与会者人数。显示以下列:

  • 出席会议人数
  • 会议ID
  • 会议开始日期和时间
  • 会议结束日期和时间
该数据库中有5个表(人员、建筑物、房间、会议、人员会议)

+-----------+------------+------------+
| 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连接开始。。。。