AKTUALISIERT2
-
Es sieht so aus, als müssten Sie TotalSales nicht in GROUP BY einschließen. Wenn man sich Ihre Abfrage ansieht, ergibt das einfach keinen Sinn. Lassen Sie es einfach aus der inneren Auswahl fallen.
-
Um nicht verkaufte Bücher einzuschließen, müssen Sie einen äußeren Join
verwenden
Davon abgesehen könnte Ihre Abfrage so aussehen
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;
Beispielausgabe:
+-------------+-----------+----------------+-------------+ | 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 | +-------------+-----------+----------------+-------------+
Hier ist SQLFiddle Demo