0

Grades というテーブルがあり、その中にいくつかの列があります。

Id  id_student  Subjects        grade 
3   1 [->]      Biology         8   
4   1 [->]      Math            4
5   1 [->]      Sports          4
6   1 [->]      Math            8
7   1 [->]      English         9
8   4 [->]      Sports          10
9   4 [->]      English         7   

id_student = 学生がログインしているこのテーブルからすべてを選択しました

$sth = $this->dbh->prepare("SELECT * FROM note WHERE id_elev = :id_elev");
$sth->bindParam(":id_elev", $_SESSION['id']);
$sth->execute();
$result = $sth->fetch(PDO::FETCH_ASSOC);

だから私が選んだのはこれだけです:

Id  id_student  Subjects        grade 
3   1 [->]      Biology         8   
4   1 [->]      Math            4
5   1 [->]      Sports          4
6   1 [->]      Math            8
7   1 [->]      English         9

この学生の Math 、 Biology などの平均成績を出したいのですが、SELECT * FROM Grades WHERE $result['Subjects'] == 'Biology' を作成せずにそれを求めています。スケジュール。

私はこのようなものが欲しい:

Id  id_student  Subjects        grade 
4   1 [->]      Math            4
6   1 [->]      Math            8

ただし、WHERE $results['Subjects'] == 'Math'; がありません。

英語が苦手な方には説明が難しくて申し訳ありません。誰かが私が書いたことを理解し、アドバイスをくれることを願っています。必要に応じて、Subject という別のテーブルを作成できます。

4

2 に答える 2

0

このフィドルをチェックしてください:

http://sqlfiddle.com/#!2/8ee5a/3

私はそれがあなたが必要とすることをすると思います。そうでない場合は、クエリをテストするのに最適な場所です。

GROUP BY 関数 AVG() を使用して、各科目の平均成績を取得しました。

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_avg

スキーマとクエリは次のとおりです。

CREATE TABLE grades 
    (
     Id int auto_increment primary key, 
     id_student int,
     Subjects varchar(20), 
     grade int(1)
    );

INSERT INTO grades
(Id, id_student, Subjects, grade)
VALUES
('3', '1', 'Biology', 8),
('4', '1', 'Math', 4),
('5', '1', 'Sports', 4),
('6', '1', 'Math', 8),
('7', '1', 'English', 9);

SELECT id_student, Subjects, AVG(grade) FROM grades GROUP BY Subjects;
于 2013-10-14T16:00:57.150 に答える