Php 获取已记录的数据的总和

Php 获取已记录的数据的总和,php,mysql,group-by,Php,Mysql,Group By,首先,这里有一个 现在你们可以在fiddle中看到,我有两个表名为project和working,现在我把项目分组,除了第二个表有\u QA后缀外,它们都有相同的名称 这意味着我已经成功地实现了允许我对该项目进行分组的查询,但现在我还需要对这两个项目的计划小时数求和 如果你在小提琴中看到它即将到来的1000,但它必须是2500,这意味着project和project\u-QA 谢谢。我的尝试 SELECT p.name, (SELECT SUM(p1.planned_hour) FRO

首先,这里有一个

现在你们可以在fiddle中看到,我有两个表名为
project
working
,现在我把项目分组,除了第二个表有
\u QA
后缀外,它们都有相同的名称

这意味着我已经成功地实现了允许我对该项目进行分组的查询,但现在我还需要对这两个项目的计划小时数求和

如果你在小提琴中看到它即将到来的
1000
,但它必须是
2500
,这意味着
project
project\u-QA

谢谢。

我的尝试

SELECT p.name,
  (SELECT SUM(p1.planned_hour)
   FROM project p1
   WHERE REPLACE(p1.name,'_QA','') = REPLACE(p.name,'_QA','') ) AS ProjectPlannedHour,
  SUM( ROUND( TIME_TO_SEC( TIMEDIFF( vv.end_date, vv.start_date ) ) / 3600 ,2)) AS TotalHour
FROM project p
INNER JOIN working vv ON vv.project_id = p.id
GROUP BY  REPLACE(p.name,'_QA','')
ORDER BY TotalHour DESC
LIMIT 0,5
加入:

SELECT p.name,
       p1.planned_hour AS ProjectPlannedHour,
       SUM(ROUND(TIME_TO_SEC(TIMEDIFF(vv.end_date, vv.start_date)) / 3600 ,2)) AS TotalHour
FROM project p
INNER JOIN working vv ON vv.project_id = p.id
INNER JOIN (SELECT REPLACE(name,'_QA','') AS `name`,
                   SUM(planned_hour) AS planned_hour
                   FROM project
                   GROUP BY REPLACE(name,'_QA','')) p1 
         ON REPLACE(p1.name,'_QA','') = REPLACE(p.name,'_QA','')
GROUP BY REPLACE(p.name,'_QA','')
ORDER BY TotalHour DESC LIMIT 0, 5
结果:

|    NAME | PROJECTPLANNEDHOUR | TOTALHOUR |
|---------|--------------------|-----------|
| project |               2500 |      4.67 |

也许有人给出了更好的解决方案,但我无法找到更简单的查询…

尝试另一种解决方案-

SELECT GROUP_CONCAT(NAME) name, SUM(planned_hour) planned_hour, SUM(TotalHour) TotalHour FROM (
  SELECT
    p.name,
    p.planned_hour,
    SUM(TIMESTAMPDIFF(SECOND, vv.start_date, vv.end_date)) / 3600 TotalHour
  FROM
    project p
  INNER JOIN
    working vv ON vv.project_id = p.id
  GROUP BY
      p.id) t;
这有点简化。结果是:

project,project_QA  2500    4,6667

我并不特别喜欢在子字符串之间工作、加入或分组。您能否使用实体之间的适当关系重构数据库?它没有给出
2500
。你也应该在问题中包含代码。不要依赖外部资源。