从表中选择主题

时间:2013-10-14 15:43:13

标签: php sql

我有一个名为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

我想为这名学生取得数学,生物学等的平均成绩,但我想要它而不做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的表。

2 个答案:

答案 0 :(得分:0)

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

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

- 因为您要在成绩列上执行汇总功能,您必须指定分组哪些列

SELECT 
    Id
    ,Subject
    ,AVG(Grade) as 'Average Grade'     
FROM
    Result
GROUP BY
    Id
    ,Subject

答案 1 :(得分: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;