gpt4 book ai didi

php - SELECT 中的 AVG 函数影响查询输出中的行数

转载 作者:行者123 更新时间:2023-11-29 00:52:15 26 4
gpt4 key购买 nike

下面是我的查询:

    $query = "
SELECT *
FROM Teacher t
INNER JOIN Session s ON t.TeacherId = s.TeacherId
JOIN Grade_Report gr ON s.SessionId = gr.SessionId
WHERE
('".mysql_real_escape_string($sessionid)."' = '' OR gr.SessionId = '".mysql_real_escape_string($sessionid)."') ";

结果存储在表中,代码如下所示:

<table border='1'>
<tr>
<th>Session ID</th>
<th>Student Username</th>
<th>Student Name</th>
<th>Mark</th>
<th>Grade</th>
</tr>
<?php
while ($row = mysql_fetch_array($result)) {
echo "
<tr>
<td>{$row['SessionId']}</td>
<td>{$row['StudentUsername']}</td>
<td>{$row['StudentForename']} {$row['StudentSurname']}</td>
<td>{$row['Mark']}</td>
<td>{$row['Grade']}</td>
</tr>";
}

此查询在结果中输出 13 行,这在它选择所有行时没问题。

现在发生的是我想要每个 session 的平均分数。所以我包括'AVG(gr.Mark) as AvgMark'在查询中包含 <td>{$row['AvgMark']}</td>在表中。它输出的计算是正确的问题是查询现在只输出 1 行,这是查询结果的第一行。我理解为 AVG(gr.Mark)输出时只需要一行。

所以我的问题是,除了使用 SELECT查询中的 'AVG(gr.Mark) as AvgMark' 以查找每个 session 的平均标记,有没有一种方法可以通过使用 php 来锻炼查询外每个标记的平均值,以便查询输出显示 13 行而不是受影响,我可以将平均值的计算存储在表格下方而不是表格中吗?

最佳答案

AVG 返回一行的原因是它是一个聚合函数,并且在没有 GROUP BY 子句的情况下对所有行进行操作。

PHP 中的平均值与其他地方的平均值一样;总计您的值并除以样本数。因此,您可以通过将代码更改为:

      <?php
$total = 0;
$count = 0;
while ($row = mysql_fetch_array($result)) {
$count++;
$total += $row['Mark'];
echo "
<tr>
<td>{$row['SessionId']}</td>
<td>{$row['StudentUsername']}</td>
<td>{$row['StudentForename']} {$row['StudentSurname']}</td>
<td>{$row['Mark']}</td>
<td>{$row['Grade']}</td>
</tr>";
}
$average = (int)($total/$count);
echo "<tr><td colspan=3></td><td>Average</td><td>$average</td></tr>".

关于php - SELECT 中的 AVG 函数影响查询输出中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7949709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com