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 = 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

我想为这个学生打一个数学、生物学等的平均成绩,但我想要它而不做 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

下面的查询是我在评论中提到的使用示例

-- AVG() 函数返回数值列的平均值。

- 因为您在 Grade 列上执行聚合函数,所以您必须指定将结果分组在一起列。

SELECT 
    Id
    ,Subject
    ,AVG(Grade) as 'Average Grade'     
FROM
    Result
GROUP BY
    Id
    ,Subject
于 2013-10-14T15:55:22.833 回答
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 回答