我编写了以下查询,该查询正确连接了两个表,该表显示团队中个人完成的任务数量以及这些任务的相关成本:
SELECT users.id AS user_id, users.name, COALESCE(tasks.cost, 0) AS cost, tasks.assignee, tasks.completed, tasks.completed_by FROM users JOIN tasks ON tasks.assignee = users.id WHERE completed IS NOT NULL AND assignee IS NOT NULL
这提供了下表:
用户 ID | 姓名 | 受让人 | 成本 | 已完成 | 完成时间 |
---|---|---|---|---|---|
18 | 迈克 | 8 | 0.25 | 2022-01-24 19:54:48 | 8 |
13 | 凯蒂 | 13 | 0 | 2022-01-24 19:55:18 | 8 |
13 | 凯蒂 | 13 | 0 | 2022-01-25 11:49:53 | 8 |
12 | 吉姆 | 12 | 0.5 | 2022-01-25 11:50:02 | 12 |
9 | 奥利 | 9 | 0.25 | 2022-03-03 02:38:41 | 9 |
我现在想进一步查找按名称和完成月份分组的成本总和。但是,我无法在当前的 select 和 WHERE 子句之后计算出 GROUP BY 的语法。最终,我希望查询返回如下内容:
姓名 | cost_sum | 月 |
---|---|---|
迈克 | 62 | 一月 |
凯蒂 | 20 | 一月 |
吉姆 | 15 | 一月 |
奥利 | 45 | 一月 |
迈克 | 17 | 二月 |
我尝试了各种组合和嵌套 GROUP BY 子句,但似乎无法获得所需的结果。任何指示将不胜感激。
P粉8832782652024-04-04 11:06:54
大概是这样的:
SELECT users.name, tasks.completed_by month, sum(COALESCE(tasks.cost, 0)) cost_sum FROM users JOIN tasks ON tasks.assignee = users.id WHERE completed IS NOT NULL AND assignee IS NOT NULL group by users.name, tasks.completed_by
P粉6749994202024-04-04 10:34:09
将 users
加入一个查询,该查询聚合在 tasks
中并返回特定年份每月的总成本:
SELECT u.name, COALESCE(t.cost, 0) AS cost, DATE_FORMAT(t.last_day, '%M') FROM users u INNER JOIN ( SELECT assignee, LAST_DAY(completed) last_day, SUM(cost) AS cost FROM tasks WHERE YEAR(completed) = 2022 GROUP BY assignee, last_day ) t ON t.assignee = u.id ORDER BY t.last_day;
不需要检查completed
是null
还是assignee
是null
,因为null
s在这里被过滤掉了:
WHERE YEAR(completed) = 2022
这里:
ON t.assignee = u.id