CROSS JOIN (tích Descartes) ghép mọi cặp dòng của hai bảng - hữu ích để dựng "khung" báo cáo đầy đủ trước khi đếm. Lập báo cáo số tài khoản ACTIVE theo từng thành phố của khách hàng và từng loại tài khoản (account_type). Mọi tổ hợp (thành phố x loại) đều phải có mặt, kể cả khi số tài khoản bằng 0.
Danh sách thành phố lấy từ Customers (DISTINCT city), danh sách loại từ Accounts (DISTINCT account_type). Gợi ý: CROSS JOIN hai danh sách rồi LEFT JOIN sang bảng đếm sẵn số tài khoản ACTIVE theo (thành phố, loại) - dùng COALESCE(..., 0) cho tổ hợp vắng mặt.
Sắp xếp theo city, rồi account_type tăng dần.
Customers(customer_id, city), Accounts(account_id, customer_id, account_type, status).
city, account_type, active_accounts; sắp theo city, account_type.
Ví dụ:
Đầu vào:
Đầu ra:
Can Tho CASH 2
Can Tho MARGIN 1
Da Nang CASH 6
Da Nang MARGIN 4
Ha Noi CASH 28
Ha Noi MARGIN 18
Hai Phong CASH 5
Hai Phong MARGIN 2
TP.HCM CASH 12
TP.HCM MARGIN 10
Giải thích:
Đang tải editor...