Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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 如何从三个或多个表中获取数据?_Mysql - Fatal编程技术网

Mysql 如何从三个或多个表中获取数据?

Mysql 如何从三个或多个表中获取数据?,mysql,Mysql,我必须找出输出作为班级名称,每个班级的学生人数和班级的平均分数?我的两张桌子都是- CREATE TABLE class(Fields_ID INT, Name VARCHAR(20)); INSERT INTO class(Fields_ID,Name) VALUES(30,'FIRST'); INSERT INTO class(Fields_ID,Name) VALUES(31,'SECOND'); INSERT INTO class(Fie

我必须找出输出作为班级名称,每个班级的学生人数和班级的平均分数?我的两张桌子都是-

 CREATE TABLE class(Fields_ID INT, Name VARCHAR(20));
        INSERT INTO class(Fields_ID,Name) VALUES(30,'FIRST');
        INSERT INTO class(Fields_ID,Name) VALUES(31,'SECOND');
        INSERT INTO class(Fields_ID,Name) VALUES(32,'THIRD');
        INSERT INTO class(Fields_ID,Name) VALUES(33,'FOURTH');
        INSERT INTO class(Fields_ID,Name) VALUES(34,'FIFTH');
SELECT * FROM class;

CREATE TABLE student(Fields_ID INT, Name VARCHAR(20));
        INSERT INTO student(Fields_ID,Name) VALUES(30,'JYOTI');
        INSERT INTO student(Fields_ID,Name) VALUES(31,'KIRTI');
        INSERT INTO student(Fields_ID,Name) VALUES(32,'YOGITA');
        INSERT INTO student(Fields_ID,Name) VALUES(33,'RASHMI');
        INSERT INTO student(Fields_ID,Name) VALUES(34,'NUPUR');
SELECT * FROM student;

CREATE TABLE Marks(Fields_ID INT, Student_ID INT NOT NULL,marks INT NOT NULL);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (30,40,100);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (31,41,88);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (32,42,72);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (33,43,33);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (34,44,15);
SELECT * FROM Marks;
我试图从下面的代码中返回所需的out,但无法形成平均分数的逻辑。你知道怎么做吗?我是MySql的初学者,所以我无法找出问题所在

SELECT class.Name , COUNT(student.name),Marks.marks
From class INNER JOIN student INNER JOIN marks
    ON class.Fields_ID=student.Fields_ID=Marks.Fields_ID
GROUP BY class.Name;
试试这个

  SELECT c.Name , COUNT(s.name),m.marks
  From class c
  INNER JOIN student s on c.Fields_ID = s.Fields_ID
  INNER JOIN Marks m on m.Fields_ID = s.Fields_ID
  GROUP BY c.Name
如果需要按标记订购,可以添加按m.marks订购。 试试这个:

SELECT class.Name, COUNT(student.Name), avg(Marks.marks)
FROM class 
JOIN student 
ON class.Fields_ID = student.Fields_ID
JOIN Marks
ON student.Student_ID = Marks.Student_ID
GROUP BY class.Name;
我对您的表和示例数据做了一些更改,因为我相信这更符合逻辑。我已将Student_ID字段添加到Student表中。否则,您无法唯一标识学生表中的行。目前您使用的是字段\ ID,但我认为这是不正确的。你想从学生而不是从田野里知道分数

样本数据

编辑:

我认为目前您的表标记将有一个名为Fields_ID的主键。这将不起作用,因为每个字段的标记都会多于一个。因此,我建议将表marks中的主键更改为marks_ID int auto_increment。如果您不想创建一个seprate键来标识行并使用compiste键PK:Student\u ID,Fields\u ID,您可以这样做。顺便说一句,不要忘记更改Student的主键

这将使用包含主键的示例数据创建表结构:

 CREATE TABLE class(Fields_ID INT PRIMARY KEY, Name VARCHAR(20));
        INSERT INTO class(Fields_ID,Name) VALUES(30,'FIRST');
        INSERT INTO class(Fields_ID,Name) VALUES(31,'SECOND');
        INSERT INTO class(Fields_ID,Name) VALUES(32,'THIRD');
        INSERT INTO class(Fields_ID,Name) VALUES(33,'FOURTH');
        INSERT INTO class(Fields_ID,Name) VALUES(34,'FIFTH');

CREATE TABLE student(Student_ID INT NOT NULL PRIMARY KEY, Fields_ID INT, Name VARCHAR(20));
        INSERT INTO student(Student_ID, Fields_ID,Name) VALUES(40, 30,'JYOTI');
        INSERT INTO student(Student_ID, Fields_ID,Name) VALUES(41, 31,'KIRTI');
        INSERT INTO student(Student_ID,Fields_ID,Name) VALUES(42, 32,'YOGITA');
        INSERT INTO student(Student_ID,Fields_ID,Name) VALUES(43, 33,'RASHMI');
        INSERT INTO student(Student_ID,Fields_ID,Name) VALUES(44, 34,'NUPUR');


CREATE TABLE Marks(Marks_ID INT auto_increment PRIMARY KEY, Fields_ID INT, Student_ID INT NOT NULL,marks INT NOT NULL) ;
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (30,40,100);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (31,41,88);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (32,42,72);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (33,43,33);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (34,44,15);

它正在生成一列平均标记,但不返回任何列中的任何值。请检查我的更新!
 CREATE TABLE class(Fields_ID INT, Name VARCHAR(20));
        INSERT INTO class(Fields_ID,Name) VALUES(30,'FIRST');
        INSERT INTO class(Fields_ID,Name) VALUES(31,'SECOND');
        INSERT INTO class(Fields_ID,Name) VALUES(32,'THIRD');
        INSERT INTO class(Fields_ID,Name) VALUES(33,'FOURTH');
        INSERT INTO class(Fields_ID,Name) VALUES(34,'FIFTH');

CREATE TABLE student(Student_ID INT NOT NULL, Fields_ID INT, Name VARCHAR(20));
        INSERT INTO student(Student_ID, Fields_ID,Name) VALUES(40, 30,'JYOTI');
        INSERT INTO student(Student_ID, Fields_ID,Name) VALUES(41, 31,'KIRTI');
        INSERT INTO student(Student_ID,Fields_ID,Name) VALUES(42, 32,'YOGITA');
        INSERT INTO student(Student_ID,Fields_ID,Name) VALUES(43, 33,'RASHMI');
        INSERT INTO student(Student_ID,Fields_ID,Name) VALUES(44, 34,'NUPUR');


CREATE TABLE Marks(Fields_ID INT, Student_ID INT NOT NULL,marks INT NOT NULL);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (30,40,100);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (31,41,88);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (32,42,72);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (33,43,33);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (34,44,15);
 CREATE TABLE class(Fields_ID INT PRIMARY KEY, Name VARCHAR(20));
        INSERT INTO class(Fields_ID,Name) VALUES(30,'FIRST');
        INSERT INTO class(Fields_ID,Name) VALUES(31,'SECOND');
        INSERT INTO class(Fields_ID,Name) VALUES(32,'THIRD');
        INSERT INTO class(Fields_ID,Name) VALUES(33,'FOURTH');
        INSERT INTO class(Fields_ID,Name) VALUES(34,'FIFTH');

CREATE TABLE student(Student_ID INT NOT NULL PRIMARY KEY, Fields_ID INT, Name VARCHAR(20));
        INSERT INTO student(Student_ID, Fields_ID,Name) VALUES(40, 30,'JYOTI');
        INSERT INTO student(Student_ID, Fields_ID,Name) VALUES(41, 31,'KIRTI');
        INSERT INTO student(Student_ID,Fields_ID,Name) VALUES(42, 32,'YOGITA');
        INSERT INTO student(Student_ID,Fields_ID,Name) VALUES(43, 33,'RASHMI');
        INSERT INTO student(Student_ID,Fields_ID,Name) VALUES(44, 34,'NUPUR');


CREATE TABLE Marks(Marks_ID INT auto_increment PRIMARY KEY, Fields_ID INT, Student_ID INT NOT NULL,marks INT NOT NULL) ;
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (30,40,100);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (31,41,88);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (32,42,72);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (33,43,33);
        INSERT INTO Marks(Fields_ID,Student_ID,Marks) VALUES (34,44,15);