首页 > 解决方案 > 选择带有减号和总和的查询

问题描述

有 3 个表userprojecttracking。这是表格tracking

ID 用户身份 项目编号 开始时间 时间结束
123 32 12 8 12
124 32 12 13 17
125 77 63 10 11
126 77 12 13 17
127 15 12 15 17
128 24 12 8 10

字段start_timeend_time与工作时间相关(8 到 12、13 到 17)。当然,每天,用户都可以为许多项目做出贡献。

现在我想获得如下项目信息:

项目名称 总跟踪时间
第一的 1860
第二 3122

其中,Total tracking time是项目成员被跟踪为贡献者的所有时间的总和。

如何通过select查询获得此结果?以下不起作用。

SELECT *,
  SUM(SELECT *, (end_time - start_time) AS tracking_time,
    FROM tracking
    WHERE project_id = project.id
  )) AS tracking_time,
FROM project

标签: mysqlsql

解决方案


您的查询应该是这样的:

SELECT p.*, t.tracking_time
FROM project p
JOIN (
  SELECT project_id, SUM(end_time - start_time) AS tracking_time
  FROM tracking
  GROUP BY project_id
) t ON p.project_id = t.project_id

或者,正如您尝试的那样,更正的查询也将起作用:

SELECT *,
  (SELECT SUM(end_time - start_time) AS tracking_time
   FROM tracking
   WHERE project_id = project.id
  ) AS tracking_time
FROM project

推荐阅读