Rumah > Soal Jawab > teks badan
Saya menulis pertanyaan berikut yang menggabungkan dua jadual dengan betul yang menunjukkan bilangan tugasan yang disiapkan oleh individu dalam pasukan dan kos berkaitan tugasan tersebut:
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
Ini menyediakan jadual berikut:
ID Pengguna | Nama | Penerima tugas | Kos | Selesai | Masa siap |
---|---|---|---|---|---|
18 | Mike | 8 | 0.25 | 2022-01-24 19:54:48 | 8 |
13 | Katie | 13 | 0 | 2022-01-24 19:55:18 | 8 |
13 | Katie | 13 | 0 | 2022-01-25 11:49:53 | 8 |
12 | Jim | 12 | 0.5 | 2022-01-25 11:50:02 | 12 |
9 | Oli | 9 | 0.25 | 2022-03-03 02:38:41 | 9 |
Saya kini ingin pergi lebih jauh dan mencari jumlah kos yang dikumpulkan mengikut nama dan bulan selesai. Walau bagaimanapun, saya tidak dapat memikirkan sintaks untuk GROUP BY selepas klausa pilih dan WHERE semasa. Akhirnya, saya mahu pertanyaan mengembalikan sesuatu seperti ini:
Nama | jumlah_kos | bulan |
---|---|---|
Mike | 62 | Januari |
Katie | 20 | Januari |
Jim | 15 | Januari |
Oli | 45 | Januari |
Mike | 17 | Februari |
Saya telah mencuba pelbagai kombinasi dan klausa GROUP BY bersarang tetapi nampaknya tidak dapat hasil yang saya inginkan. Sebarang petunjuk akan amat dihargai.
P粉8832782652024-04-04 11:06:54
Ia kelihatan seperti ini:
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
Menggabungkan users
加入一个查询,该查询聚合在 tasks
dan mengembalikan jumlah kos bulanan untuk tahun tertentu:
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;
Tidak perlu menyemak completed
是null
还是assignee
是null
,因为null
s ditapis di sini:
WHERE YEAR(completed) = 2022
Di sini:
ON t.assignee = u.id