当从两个表中提取数据(中间有第三个表)时,我无法进行查询。让我告诉你我的意思。
*Table companies*
id int PK
name text
*Table projects*
id int PK
company_id int FK
project_name text
*Table hours_worked*
id int pk
user_id int FK
project_id int FK
hours float
date_worked datetime
*Table users*
id int PK
user_name text
基本上,我需要的是一个根据用户 ID 提取每个公司工作总小时数的查询。
请注意,每个项目的 table_hours 工作时间每天可以有多个提交。例如,几行可能看起来像
id project_id user_id hours date_worked
1 1 1 2 20-08-2012
2 1 1 1.5 20-08-2012
3 2 1 3 21-08-2012
4 2 2 12 22-08-2012
我想要的结果是返回如下内容的查询:
company_name total_hours
Bobs Kitchens 25
Mikes Bikes 67
这将返回每个公司(而非项目)的总工作小时数,例如用户 ID 为 1 的用户。
这是我尝试过的以下查询,但没有成功:
SELECT DISTINCT companies.name as company_name,
companies.id as company_id,
(
SELECT SUM(hours_worked.hours) FROM hours_worked
WHERE projects.id = hours_worked.project_id
AND projects.company_id = company_id
) as total_hours
FROM hoursworked, companies, projects
WHERE projects.company_id = company_id
AND projects.company_id = projects.company_id
AND hours_worked.user_id = 1
GROUP BY companies.id
这给了我一个奇怪的结果,每个total_hours字段似乎都显示一个非常奇怪的数字。对于任何公司来说,75 小时都不是正确的总工作时间!
company_name total_hours
Mikes Kitchen 75
Charlies Bikes 75
..... 75
任何帮助将不胜感激!
最佳答案
试试这个:
SELECT c.name company_name, u.user_name, SUM(h.hours) total_hours
FROM projects p
INNER JOIN companies c ON p.company_id = c.id
INNER JOIN hours_worked h ON p.id = h.project_id
INNER JOIN users u ON h.user_id = u.id
GROUP BY c.id, u.id
关于mysql - 使用 sum() 子查询连接三个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13491838/