SQL join後面按多個欄位分組
P粉616383625
P粉616383625 2024-04-03 12:25:01
0
2
394

我編寫了以下查詢,該查詢正確連接了兩個表,該表顯示團隊中個人完成的任務數量以及這些任務的相關成本:

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粉616383625
P粉616383625

全部回覆(2)
P粉883278265

大概是這樣的:

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粉674999420

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;

不需要檢查completednull還是assigneenull,因為nulls在這裡被過濾掉了:

WHERE YEAR(completed) = 2022

這裡:

ON t.assignee = u.id
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!