MySQL 对多个联接使用 SUM
MySQL Using SUM with multiple joins
我有一个项目 table 和一个任务 table 我想执行一个查询来获取所有项目以及按项目 ID 分组的 time_spent 列的总和。因此,基本上列出所有项目并获取属于该项目的任务 table 中所有 time_spent 列的总数。
通过下面发布的查询,我得到了最新添加的 time_spent 列,而不是所有列的总和。:S
以下是我目前的查询:
SELECT `projects`.`id`, `projects`.`description`, `projects`.`created`,
`users`.`title`, `users`.`firstname`, `users`.`lastname`, `users2`.`title`
as assignee_title, `users2`.`firstname` as assignee_firstname,
`users2`.`lastname` as assignee_lastname,
(select sum(tasks2.time_spent)
from tasks tasks2
where tasks2.id = tasks.id)
as project_duration
FROM (`projects`)
LEFT JOIN `users`
ON `users`.`id` = `projects`.`user_id`
LEFT JOIN `users` as users2
ON `users2`.`id` = `projects`.`assignee_id`
LEFT JOIN `tasks` ON `tasks`.`project_id` = `projects`.`id`
GROUP BY `projects`.`id`
ORDER BY `projects`.`created` DESC
以下是我的项目table:
以下是我的任务table:
提前致谢!
通常此查询会对您有所帮助。
SELECT p.*, (SELECT SUM(t.time_spent) FROM tasks as t WHERE t.project_id = p.id) as project_fulltime FROM projects as p
在你的问题中,你没有提到用户。你需要用户吗?
你走对了,也许你的 JOIN
s 无法获取所有数据。
此查询应该为您完成。
请注意,无论何时您按 进行分组,都必须 包括您 select 来自或排序的每一列。某些 MySql 安装不会阻止您这样做,但最终会导致结果集不正确。
此外,您永远不应该将查询作为 SELECT 语句的一部分进行,称为子查询,因为它会导致与返回的行数相关的相同数量的额外查询.因此,如果您返回 1,000 行,将产生 1,001 个查询而不是 1 个查询。
SELECT
p.id,
p.description,
p.created,
u.title,
u.firstname,
u.lastname,
a.title assignee_title,
a.firstname assignee_firstname,
a.lastname assignee_lastname,
SUM(t.time_spent) project_duration
FROM
projects p
LEFT JOIN
users u ON
u.id = p.user_id
LEFT JOIN
users a ON
a.id = u.assignee_id
LEFT JOIN
tasks t ON
t.project_id = p.id
GROUP BY
p.id,
p.description,
p.created,
u.title,
u.firstname,
u.lastname,
a.title,
a.firstname,
a.lastname
ORDER BY
p.created DESC
我有一个项目 table 和一个任务 table 我想执行一个查询来获取所有项目以及按项目 ID 分组的 time_spent 列的总和。因此,基本上列出所有项目并获取属于该项目的任务 table 中所有 time_spent 列的总数。
通过下面发布的查询,我得到了最新添加的 time_spent 列,而不是所有列的总和。:S
以下是我目前的查询:
SELECT `projects`.`id`, `projects`.`description`, `projects`.`created`,
`users`.`title`, `users`.`firstname`, `users`.`lastname`, `users2`.`title`
as assignee_title, `users2`.`firstname` as assignee_firstname,
`users2`.`lastname` as assignee_lastname,
(select sum(tasks2.time_spent)
from tasks tasks2
where tasks2.id = tasks.id)
as project_duration
FROM (`projects`)
LEFT JOIN `users`
ON `users`.`id` = `projects`.`user_id`
LEFT JOIN `users` as users2
ON `users2`.`id` = `projects`.`assignee_id`
LEFT JOIN `tasks` ON `tasks`.`project_id` = `projects`.`id`
GROUP BY `projects`.`id`
ORDER BY `projects`.`created` DESC
以下是我的项目table:
以下是我的任务table:
提前致谢!
通常此查询会对您有所帮助。
SELECT p.*, (SELECT SUM(t.time_spent) FROM tasks as t WHERE t.project_id = p.id) as project_fulltime FROM projects as p
在你的问题中,你没有提到用户。你需要用户吗?
你走对了,也许你的 JOIN
s 无法获取所有数据。
此查询应该为您完成。
请注意,无论何时您按 进行分组,都必须 包括您 select 来自或排序的每一列。某些 MySql 安装不会阻止您这样做,但最终会导致结果集不正确。
此外,您永远不应该将查询作为 SELECT 语句的一部分进行,称为子查询,因为它会导致与返回的行数相关的相同数量的额外查询.因此,如果您返回 1,000 行,将产生 1,001 个查询而不是 1 个查询。
SELECT
p.id,
p.description,
p.created,
u.title,
u.firstname,
u.lastname,
a.title assignee_title,
a.firstname assignee_firstname,
a.lastname assignee_lastname,
SUM(t.time_spent) project_duration
FROM
projects p
LEFT JOIN
users u ON
u.id = p.user_id
LEFT JOIN
users a ON
a.id = u.assignee_id
LEFT JOIN
tasks t ON
t.project_id = p.id
GROUP BY
p.id,
p.description,
p.created,
u.title,
u.firstname,
u.lastname,
a.title,
a.firstname,
a.lastname
ORDER BY
p.created DESC