搜尋

首頁  >  問答  >  主體

SQL join後面按多個欄位分組

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

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粉616383625P粉616383625230 天前458

全部回覆(2)我來回復

  • P粉883278265

    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

    回覆
    0
  • P粉674999420

    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;

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

    WHERE YEAR(completed) = 2022

    這裡:

    ON t.assignee = u.id

    回覆
    0
  • 取消回覆