sql >> Databasteknik >  >> RDS >> Mysql

GROUP BY-sats med alias?

UPPDATERAD2

  1. Det verkar som att du inte behöver inkludera TotalSales i GROUP BY. När du tittar på din fråga är det helt enkelt ingen mening. Ta bara bort det från den inre markeringen.

  2. För att inkludera böcker som inte har sålts måste du använda en yttre koppling

Med det sagt kan din fråga se ut

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;

Exempelutdata:

+-------------+-----------+----------------+-------------+
| 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      |
+-------------+-----------+----------------+-------------+

Här är SQLFiddle demo



  1. SQL är lika med (=) operatör för nybörjare

  2. Sätt upp en stor databas i MySQL för analys i R

  3. bevilja fil på bara en databas

  4. Vanliga MySQL-fält och deras lämpliga datatyper