Joins with grouping · Joins dengan grouping
Reports: joins with grouping
The real power comes from combining what you have learned: join two tables, group the joined rows, and summarise each group with an aggregate.
A common report is "how much has each customer spent?" — join customers to their orders, group by customer, and SUM the totals.
Laporan: join dengan pengelompokan
Kekuatan sebenarnya datang dari menggabungkan apa yang telah Anda pelajari: join dua tabel, group baris yang digabungkan, dan summarise (ringkaskan) setiap kelompok dengan fungsi agregat.
Laporan umum adalah "berapa banyak yang dihabiskan setiap pelanggan?" — gabungkan pelanggan dengan pesanan mereka, kelompokkan berdasarkan pelanggan, dan SUM totalnya.
One row per customer
Reading it in order: join the tables, group the rows by customer, then for each group count the orders and add up the totals.
Satu baris per pelanggan
SELECT customer.name,
COUNT(*) AS orders,
ROUND(SUM(orders.total), 2) AS spent
FROM customer
INNER JOIN orders ON customer.id = orders.customer_id
GROUP BY customer.id
ORDER BY customer.name;
Membacanya secara berurutan: join tabel-tabel tersebut, group baris-baris berdasarkan pelanggan, lalu untuk setiap kelompok hitung jumlah pesanan dan tambahkan totalnya.
Common mistakes
- Join first, then
GROUP BYto summarise the joined rows. - Qualify a column with its table name when both tables share it.
Kesalahan Umum
- Join terlebih dahulu, kemudian
GROUP BYuntuk meringkas baris yang digabungkan. - Qualify (tandai) sebuah kolom dengan nama tabelnya ketika kedua tabel membaginya.
Joining tables · Menggabungkan tabel
An inner join drops rows that have no match. · An inner join membuang baris yang memiliki tidak ada kecocokan.
For each customer who has orders, show their name, their number of orders as orders, and their total spend (2 d.p.) as spent. Join, group by customer.id, and order by name. · Untuk setiap customer yang memiliki orders, tampilkan name-nya, jumlah orders-nya sebagai orders, dan total pengeluaran (2 d.p.) sebagai spent. Join, group by customer.id, dan order by name.
Click Run to see the output here. · Klik Jalankan untuk melihat output di sini.
An INNER JOIN hid Ben and Dan, who have no orders. Use a LEFT JOIN to keep every customer, and COUNT(orders.id) so a customer with no orders shows 0. Order by name. · Tampilkan INNER JOIN untuk Ben dan Dan, yang tidak memiliki pesanan. Gunakan LEFT JOIN untuk menjaga semua pelanggan, dan COUNT(orders.id) agar pelanggan tanpa pesanan menampilkan 0. Urutkan berdasarkan name.
Click Run to see the output here. · Klik Jalankan untuk melihat output di sini.