MySQL 对具有相同 ID 的行求和
MySQL SUM rows with same ID
我有一个似乎无法解决的问题。我有两个表,Project 和 Activity。我应该合并在每个项目上花费的 activity 的总小时数。少于 1000 小时的项目不包括在内。
Project_Nr | Project_Name | Total Hours |
1 | pro1 | 501 |
1 | pro1 | 501 |
2 | pro2 | 250 |
3 | pro3 | 1250 |
如您所见,pro1 加起来超过 1000 小时,pro3 也是如此。我希望最终结果打印出这样的东西。
Project_Nr | Project_Name | Total Hours |
1 | pro1 | 1002 |
3 | pro3 | 1250 |
这是我到目前为止的 SQL 声明。我一直在获取所有项目的总时数,而不是在 Project_Nr.
上拆分
SELECT
project.PK_Project_Nr,
project.Project_Name,
SUM(activity.Hours) AS Combined_Hours
FROM project
INNER JOIN activity ON project.PK_Project_Nr = activity.FK_Project_Nr
WHERE project.PK_Project_Nr IN (1)
AND project.Project_Status = "A"
GROUP BY project.Project_Nr ASC;
此代码仅检查 Project_Nr 1. 我需要它来检查所有不同的项目并检查它们的总小时数是否为 1000 并且它们的状态是否为 "A"(这意味着项目正在进行中)。
只是从 WHERE
子句中删除条件?然后添加一个 HAVING
子句用于过滤总小时数:
SELECT p.PK_Project_Nr,
p.Project_Name,
SUM(a.Hours) AS Combined_Hours
FROM project p JOIN
activity a
ON p.PK_Project_Nr = a.FK_Project_Nr
WHERE p.Project_Status = 'A'
GROUP BY p.Project_Nr ASC
HAVING SUM(a.Hours) >= 1000;
我有一个似乎无法解决的问题。我有两个表,Project 和 Activity。我应该合并在每个项目上花费的 activity 的总小时数。少于 1000 小时的项目不包括在内。
Project_Nr | Project_Name | Total Hours |
1 | pro1 | 501 |
1 | pro1 | 501 |
2 | pro2 | 250 |
3 | pro3 | 1250 |
如您所见,pro1 加起来超过 1000 小时,pro3 也是如此。我希望最终结果打印出这样的东西。
Project_Nr | Project_Name | Total Hours |
1 | pro1 | 1002 |
3 | pro3 | 1250 |
这是我到目前为止的 SQL 声明。我一直在获取所有项目的总时数,而不是在 Project_Nr.
上拆分SELECT
project.PK_Project_Nr,
project.Project_Name,
SUM(activity.Hours) AS Combined_Hours
FROM project
INNER JOIN activity ON project.PK_Project_Nr = activity.FK_Project_Nr
WHERE project.PK_Project_Nr IN (1)
AND project.Project_Status = "A"
GROUP BY project.Project_Nr ASC;
此代码仅检查 Project_Nr 1. 我需要它来检查所有不同的项目并检查它们的总小时数是否为 1000 并且它们的状态是否为 "A"(这意味着项目正在进行中)。
只是从 WHERE
子句中删除条件?然后添加一个 HAVING
子句用于过滤总小时数:
SELECT p.PK_Project_Nr,
p.Project_Name,
SUM(a.Hours) AS Combined_Hours
FROM project p JOIN
activity a
ON p.PK_Project_Nr = a.FK_Project_Nr
WHERE p.Project_Status = 'A'
GROUP BY p.Project_Nr ASC
HAVING SUM(a.Hours) >= 1000;