Php 如何在mysql中对两个查询求和

Php 如何在mysql中对两个查询求和,php,mysql,Php,Mysql,我需要一个具体的答案,谢谢。我有这个php代码和查询,还有这个表。在这个查询中,实际起作用的是从行中添加值,但如果它们的值为0,则不考虑这些值。有必要执行此查询,但也需要获取获得的值,并根据输入方式从列中划分行数: 例如: 所有行的总和除以行数: CREATE TABLE `ocene` ( `id` int(11) NOT NULL, `predmeti` varchar(255) NOT NULL, `ocena1` varchar(255) NOT NULL,

我需要一个具体的答案,谢谢。我有这个php代码和查询,还有这个表。在这个查询中,实际起作用的是从行中添加值,但如果它们的值为0,则不考虑这些值。有必要执行此查询,但也需要获取获得的值,并根据输入方式从列中划分行数:

例如:

所有行的总和除以行数:

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
    ----------
    TOTAL: 4,34 <--- sum of all rows divided by number of rows

如果一个具有平均值和一个具有汇总值的GROUPBY适用于您的MySql版本,请尝试

如果每个predmeti只有一条记录?那么它应该是正常的,因为平均值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
结果:

选择舍入和 圆头眼镜蛇1+ocena2+ocena3+ocena4+ocena5+ocena6/ ocena1!='0'+ocena2!='0'+ocena3!='0'+ocena4!='0'+ocena5!='0'+ocena6!='0', 2 /COUNTid,共2个
ocene

也许要注意:mysqli的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_查询接口混淆。在你对程序性风格投入太多之前,值得换一种。示例:$db=new mysqli…和$db->prepare…过程接口是引入mysqli API时PHP4时代的产物,理想情况下不应在新代码中使用。请问,有什么具体的答案吗?您需要修复的第一件事可能是数据库表。这种问题是糟糕设计的症状,我不知道。替换php中的SQL并尝试?顺便说一句,大多数人会使用数字数据类型来保存数字。
    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
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