|
|
|
| Нужна помощь.
Сделал базу данных.
Как мне подсчитать (не среднее значение строчки), а всего столбца?
Сейчас у меня выводит:
subject_name | subject_teacher | T-P | a (это среднее)
matematika | Jonaitis | T | 9
biologija | Tonaitis | P | 6.5
fizika | Ronaitis | T | 8.5
А я хочу, чтобы выводило бы так:
subject_name | subject_teacher | T-P | a (это среднее)
matematika | Jonaitis | T | 9
biologija | Tonaitis | P | 6.5
fizika | Ronaitis | T | 8.5
| 8.0
в смысле хочу, чтобы выводило бы среднее значение всего столбца (9 + 6.5 + 8.5)/3 = 8
Но в базе может быть и 10 записей (в смысле 1+2+...+n)/n:
matematika | Jonaitis | T | 9
biologija | Tonaitis | P | 6.5
fizika | Ronaitis | T | 8.5
...................................................
.................................................
n | n| n| n
Как мне это сделать?
Вот код:
<?php
require_once ("../config.php");
?>
<?php
$table_name = "tablica";
$countPeoplesSQL = "SELECT count(distinct(subject_teacher)) AS kiekis FROM $table_name";
$countPeoplesResult = mysql_query($countPeoplesSQL, $connection) or die("ERROR: ".mysql_error());
$kiekisRow = mysql_fetch_assoc($countPeoplesResult);
$kiekis = $kiekisRow['kiekis'];
$sql = "SELECT subject_name, subject_teacher, t_p, avg(a1) AS avg_a1, avg(a2) AS avg_a2, avg(a3) AS avg_a3, avg(a1 + a2 + a3)/3 AS average_row_a
FROM $table_name
GROUP BY subject_teacher, t_p
ORDER BY average_row_a DESC
";
$result = @mysql_query($sql,$connection) or die("ERROR: ".mysql_error());
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
<title>name </title>
</head>
<body>
<table width="100%" border="1" align="center" cellpadding="5" cellspacing="0">
<tr align="center">
<th><p>subject_name</p></th>
<th>subject_teacher</p></th>
<th>T-P</p></th>
<td><p>a</p></td>
</tr>
<?php
while ($row = mysql_fetch_array($result)) {
$subject_name = $row['subject_name'];
$subject_teacher = $row['subject_teacher'];
$t_p = $row['t_p'];
$avg_a1 = $row['avg_a1'];
$avg_a2 = $row['avg_a2'];
$avg_a3 = $row['avg_a3'];
$average_row_a = $row['average_row_a'];
?>
<tr>
<td valign="top"><p align="center"><?php echo "$subject_name"; ?> </p></td>
<td valign="top"><p align="center"><?php echo "$subject_teacher"; ?></p></td>
<td valign="top"><p align="center"><?php echo "$t_p"; ?></p></td>
<td valign="top"><p align="center"><?php echo number_format("$average_row_a", "2"); ?></p></td>
</tr>
<tr>
<?
}
mysql_close($connection);
?>
</table>
</body>
</html> | |
|
|
|
|
|
|
|
для: jurij_83
(29.03.2006 в 11:13)
| | Прошу прощения, но без оформления тегами (в форме ввода - правее имени и пароля) Вашу задачу просто не прочитать. Ниже идет Ваше сообщение:
===============================================
Нужна помощь.
Сделал базу данных.
Как мне подсчитать (не среднее значение строчки), а всего столбца?
Сейчас у меня выводит:
subject_name| subject_teacher | T-P | a (это среднее)
matematika | Jonaitis | T | 9
biologija | Tonaitis | P | 6.5
fizika | Ronaitis | T | 8.5
|
А я хочу, чтобы выводило бы так:
subject_name| subject_teacher | T-P | a (это среднее)
matematika | Jonaitis | T | 9
biologija | Tonaitis | P | 6.5
fizika | Ronaitis | T | 8.5
| 8.0
|
в смысле хочу, чтобы выводило бы среднее значение всего столбца (9 + 6.5 + 8.5)/3 = 8
Но в базе может быть и 10 записей (в смысле 1+2+...+n)/n:
matematika | Jonaitis | T | 9
biologija | Tonaitis | P | 6.5
fizika | Ronaitis | T | 8.5
...................................................
.................................................
n | n| n| n
|
Как мне это сделать?
Вот код:
<?php
require_once ("../config.php");
?>
<?php
$table_name = "tablica";
$countPeoplesSQL = "SELECT count(distinct(subject_teacher)) AS kiekis FROM $table_name";
$countPeoplesResult = mysql_query($countPeoplesSQL, $connection) or die("ERROR: ".mysql_error());
$kiekisRow = mysql_fetch_assoc($countPeoplesResult);
$kiekis = $kiekisRow['kiekis'];
$sql = "SELECT subject_name, subject_teacher, t_p, avg(a1) AS avg_a1, avg(a2) AS avg_a2, avg(a3) AS avg_a3, avg(a1 + a2 + a3)/3 AS average_row_a
FROM $table_name
GROUP BY subject_teacher, t_p
ORDER BY average_row_a DESC
";
$result = @mysql_query($sql,$connection) or die("ERROR: ".mysql_error());
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
<title>name </title>
</head>
<body>
<table width="100%" border="1" align="center" cellpadding="5" cellspacing="0">
<tr align="center">
<th><p>subject_name</p></th>
<th>subject_teacher</p></th>
<th>T-P</p></th>
<td><p>a</p></td>
</tr>
<?php
while ($row = mysql_fetch_array($result)) {
$subject_name = $row['subject_name'];
$subject_teacher = $row['subject_teacher'];
$t_p = $row['t_p'];
$avg_a1 = $row['avg_a1'];
$avg_a2 = $row['avg_a2'];
$avg_a3 = $row['avg_a3'];
$average_row_a = $row['average_row_a'];
?>
<tr>
<td valign="top"><p align="center"><?php echo "$subject_name"; ?> </p></td>
<td valign="top"><p align="center"><?php echo "$subject_teacher"; ?></p></td>
<td valign="top"><p align="center"><?php echo "$t_p"; ?></p></td>
<td valign="top"><p align="center"><?php echo number_format("$average_row_a", "2"); ?></p></td>
</tr>
<tr>
<?
}
mysql_close($connection);
?>
</table>
</body>
</html>
|
| |
|
|
|
|
автор: cheops (из кафе) (29.03.2006 в 13:19) |
|
|
для: Trianon
(29.03.2006 в 11:57)
| | Чего-то не очень понятно, имеется ввиду, что вам необходимо среднее значение извлечённых значений или среднее значение всего столбца? | |
|
|
|
|
|
|
|
для: cheops (из кафе)
(29.03.2006 в 13:19)
| | Мне нужно вывести под низом под a (среднее значение из всего столбца - пока у меня 3 строчки занято, но их, по мере добавления в базу данных, будет пребовляться).
И нужно, чтобы как-то подсчитать это среднее значение всего столбца (в каждой строчке среднее значение каждой строчки состоит из 3 полей a1, a2, a3 этот у меня подсчитывается по avg).
Но ко всему нужно среднее значение всего столбца. Понятно ли? | |
|
|
|
|
|
|
|
для: jurij_83
(29.03.2006 в 13:48)
| | Можно оформить отдельный SQL-запрос с функцией avg(), но без группировки GROUP BY, тогда среднее значение будет вычисленно для всего столбца. Или если у вас MySQL выше 4.1.1 можно воспользоваться модификатором WITH ROLLUP
<?php
SELECT subject_name, subject_teacher, t_p, avg(a1) AS avg_a1, avg(a2) AS avg_a2, avg(a3) AS avg_a3, avg(a1 + a2 + a3)/3 AS average_row_a
FROM $table_name
GROUP BY subject_teacher, t_p WITH ROLLUP
ORDER BY average_row_a DESC
?>
|
Последняя строка даст результат для всей таблицы. | |
|
|
|
|
|
|
|
для: cheops
(29.03.2006 в 18:21)
| | Спасибо за попытки решить проблему, но она, к сожалению, пока остаётся.
1. У меня версия MySQL ниже, чем 4.1.1 (кажется 3.4).
А что такое WITH ROLLUP?
2. Если убрать GROUP BY, то будет ошибка, с которой я уже когда-то сталкивался (а дело в том, что когда использую функцию avg(), то обязательно нужно группировать по GROUP BY)...
Так как мне решить мою проблему (подсчитать среднее значение столбца в зависимости от количества записей). | |
|
|
|
|
|
|
|
для: jurij_83
(29.03.2006 в 20:31)
| | WITH ROLLUP - модификатор GROUP BY , указывающий, что нужно добавить дополнительные строки к отчету и вписать в них значения агрегатных функций над данными без учета группировки по указанным столбцам. Это если на пальцах. А вообще, по-моему им не стоит шутить. Уж больно хитрая штука, судя по описанию.
Непонятно другое. Почему это avg требует GROUP BY?
У Вас не проходит SELECT avg(a1) as a1, avg(a2) as a2 FROM $table_name ? | |
|
|
|