CẬP NHẬT2
-
Có vẻ như bạn không cần đưa TotalSales vào GROUP BY. Nhìn vào truy vấn của bạn, nó không có ý nghĩa gì cả. Chỉ cần loại bỏ nó khỏi lựa chọn bên trong.
-
Để bao gồm những cuốn sách chưa được bán, bạn phải sử dụng một kết nối bên ngoài
Điều đó được cho là truy vấn của bạn có thể trông giống như
SELECT COALESCE(author_id, 'All Authors') author_id
, COALESCE(book_id, IF(author_id IS NULL, 'All Books', 'Subtotal')) book_id
, COALESCE(total_quantity, 'No books') total_quantity
, COALESCE(total_sales, 'No Sales') total_sales
FROM
(
SELECT author_id
, b.book_id
, SUM(quantity) total_quantity
, SUM(quantity * order_price) total_sales
FROM book_authors b LEFT JOIN order_details d
ON b.book_id = d.book_id
WHERE author_sequence = 1
GROUP BY Author_id, Book_ID WITH ROLLUP -- you don't need TotalSales here
) q;
Đầu ra mẫu:
+-------------+-----------+----------------+-------------+ | author_id | book_id | total_quantity | total_sales | +-------------+-----------+----------------+-------------+ | 1 | 1 | 12 | 278.50 | | 1 | 3 | No books | No Sales | | 1 | Subtotal | 12 | 278.50 | | 3 | 2 | 5 | 75.75 | | 3 | Subtotal | 5 | 75.75 | | All Authors | All Books | 17 | 354.25 | +-------------+-----------+----------------+-------------+
Đây là SQLFiddle bản demo