具体的な答えが必要です、ありがとうございます。私はこのphpコードとクエリ、そしてテーブルを持っています。ここで実際に機能するのは、このクエリでは、値が行から追加されますが、値が0の場合は考慮されません。必要なのは、このクエリを実行するだけでなく、取得した値を取得して除算することです。入力方法に応じた列の行数:
例:
(4.20 + 5.00 + 4.80) / 3 number of rows = 4,67 TOTAL or
(4.20 + 5.00 + 4.80 + 3,10 + 5,00) / 5 number of rows = 4,42 TOTAL etc.
すべての行の合計を行数で割ったもの:
CREATE TABLE `ocene`
(
`id` int(11) NOT NULL,
`predmeti` varchar(255) NOT NULL,
`ocena1` varchar(255) NOT NULL,
`ocena2` varchar(255) NOT NULL,
`ocena3` varchar(255) NOT NULL,
`ocena4` varchar(255) NOT NULL,
`ocena5` varchar(255) NOT NULL,
`ocena6` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `ocene` (`id`, `predmeti`, `ocena1`, `ocena2`, `ocena3`, `ocena4`, `ocena5`, `ocena6`)
VALUES (1, 'French', '4', '5', '5', '5', '5', '0'),
(2, 'Mathematics', '3', '5', '3', '2', '5', '5'),
(3, 'English', '5', '5', '5', '0', '0', '0'),
(4, 'Physics', '5', '3', '5', '4', '0', '0'),
(5, 'Chemistry', '4', '4', '5', '4', '2', '0');
私のPHPコード:
$sql = "SELECT predmeti,
ROUND((ocena1 + ocena2 + ocena3 + ocena4 + ocena5 + ocena6) /
((ocena1 != '0') + (ocena2 != '0') + (ocena3 != '0') + (ocena4 != '0') + (ocena5 != '0') + (ocena6 != '0')), 2)
AS final_count
FROM ocene";
if ($result=mysqli_query($con,$sql))
{
while ($row=mysqli_fetch_row($result))
{
printf ("%s = <b>%s</b> <br />",$row[0],$row[1]);
}
mysqli_free_result($result);
}
現在の結果は次のとおりです。
French = 4,80
Mathematics = 3,83
English = 5,00
Physics = 4,25
Chemistry = 3,80
私は以下が必要です:
French = 4,80
Mathematics = 3,83
English = 5,00
Physics = 4,25
Chemistry = 3,80
----------
TOTAL: 4,34 <--- sum of all rows divided by number of rows
MySqlのバージョンで、平均値とWITHROLLUPのGROUPBYが機能するかどうかを試してください。
各「predmeti」にレコードが1つしかない場合はどうなりますか?1の値のAVGは値に等しいので、それで問題ないはずです。
SELECT COALESCE(predmeti, 'TOTAL') AS predmeti,
ROUND(AVG((ocena1 + ocena2 + ocena3 + ocena4 + ocena5 + ocena6) / ((ocena1 != '0') + (ocena2 != '0') + (ocena3 != '0') + (ocena4 != '0') + (ocena5 != '0') + (ocena6 != '0'))),2) AS final_count
FROM ocene
GROUP BY predmeti WITH ROLLUP
結果:
predmeti final_count
---------- --------------
Chemistry 3,8
English 5
French 4,8
Mathematics 3,83
Physics 4,25
TOTAL 4,34
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加