Mysql
 sql >> Datenbank >  >> RDS >> Mysql

GROUP BY-Klausel mit Alias?

AKTUALISIERT2

  1. 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.

  2. 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