Mysql
 sql >> база данни >  >> RDS >> Mysql

Генерирайте заявка с помощта на 5 таблици

Ето един подход, който може да свърши работата. Логиката е да се използват обобщени подзаявки за извършване на междинните изчисления.

Тази заявка получава приходите от On_sale таблица по години.

SELECT YEAR(sale_date) yr, SUM(sale_price) amtFROM On_saleGROUP BY YEAR(sale_date); 

Тази друга заявка получава приходите на магазин и на година, като използва таблици Продадени и Продукт :

SELECT s.store_number, YEAR(s.sold_date) yr, SUM(s.sold_quantity * p.retail_price) amtFROM Sold s INNER JOIN Product p ON p.pid =s.pidGROUP BY s.store_number, YEAR (sold_date); 

Сега можем да СЕ ПРИСЪЕДИНИМ резултатите от тези заявки с Град и Магазин маси. В същото време можем да разделим градовете в различни категории по размер и да използваме това, за да обобщим резултатите. Използвам LEFT JOIN в случай че една от подзаявките генерира празен набор от резултати (в противен случай, INNER JOIN е добре):

SELECT COALESCE(sa.yr, so.yr) sale_year, CASE WHEN c.population> 200 THEN 'large' WHEN c.population <=200 AND c.population> 100 THEN 'medium' ELSE 'mall ' END as size_range, SUM(COALESCE(so.amt, 0) + COALESCE(sa.amt, 0)) earningsFROM City c INNER JOIN Store st ON st.state =c.state AND st.city_name =c.city_name LEFT JOIN ( SELECT s.store_number, YEAR(s.sold_date) yr, SUM(s.sold_quantity * p.retail_price) amt FROM Sold s INNER JOIN Product p ON p.pid =s.pid GROUP BY s.store_number, YEAR(sold_date) ) so ON so.store_number =st.store_number LEFT JOIN ( SELECT YEAR(sale_date) yr, SUM(sale_price) amt FROM On_sale GROUP BY YEAR(sale_date) ) sa ON sa.yr =so.yrGROUP BY sale_year, size_rangeORDER BY sale_year, size_range 

Това демо на DB Fiddle с вашите примерни данни демонстрира междинните стъпки и накрая връща:

<предварителен код>| година на продажба | диапазон_размер | приходи || --------- | ---------- | ------- || 2017 | малък | 15 || 2018 | средно | 14 || 2019 | голям | 12 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Проблем с правилното преброяване с присъединяване

  2. SQL заявка:Изтриване на запис, който не присъства в таблица за свързване?

  3. Как да внедрим йерархични cms сайтове?

  4. Как да изберете име на домейн от имейл адрес

  5. PHP добавя наклонени черти, sql инжекция все още е валидна?