【问题标题】:Select subjects from table从表中选择主题
【发布时间】:2013-10-14 15:43:13
【问题描述】:

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

【问题讨论】:

  • GROUP BY 是您要找的吗?然后你可以在成绩列上做一些函数来计算出整体平均值,比如AVG。见this

标签: php sql


【解决方案1】:

看看这个小提琴:

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;

【讨论】:

  • 我不能投票,因为我没有足够的声誉,但这正是我需要的。非常感谢托德。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 2022-08-17
    相关资源
    最近更新 更多