Himpunkan mengikut berbilang medan selepas gabungan SQL
P粉616383625
P粉616383625 2024-04-03 12:25:01
0
2
493

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

membalas semua(2)
P粉883278265

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

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 completednull还是assigneenull,因为nulls ditapis di sini:

WHERE YEAR(completed) = 2022

Di sini:

ON t.assignee = u.id
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan