我有一个名为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的表。
答案 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;