我需要一个具体的答案,谢谢。我有这个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
答案 0 :(得分:1)
尝试使用平均数和WITH ROLLUP的GROUP BY来解决您的MySql版本。
如果每个“ predmeti”只有1条记录?然后应该没问题,因为AVG值为1等于该值。
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
答案 1 :(得分:0)
SELECT ROUND(sum( 回合((ocena1 + ocena2 + ocena3 + ocena4 + ocena5 + ocena6)/ ((ocena1!='0')+(ocena2!='0')+(ocena3!='0')+(ocena4!='0')+(ocena5!='0')+(ocena6!= '0')),2) )/ COUNT(id),2)作为总数 来自始新世