мульти-расчетный запрос - PullRequest
0 голосов
/ 26 июня 2011

Таблица продуктов

id      name       description       price

 1      AAA         AAAAAA           10.00
 2      BBB         BBBBBB           12.00
 3      CCC         CCCCCC           15.00
 4      DDD         DDDDDD            8.00
 5      EEE         EEEEEE           12.50

Таблица продаж

trackid     productid     affiliateid     paymentstatus     refundid

   1           2               1           COMPLETED         1
   2           2               0           DONE              null
   3           3               1           COMPLETED         null
   4           3               0           COMPLETED         null
   5           3               0           COMPLETED         null
   6           5               5           DONE              null
   7           5               0           COMPLETED         2
   8           5               2           COMPLETED         null
   9           2               0           DONE              null
  10           3               1           COMPLETED         3

Для таблицы продаж

  • Если для конкретной продажи нет партнера,тогда affiliateid будет равен 0, в противном случае affiliateid (у меня есть другая таблица для пользователя, в которой перечислены продавцы и аффилиаты)

  • Если по каким-либо причинам были возвращены определенные продажи (по любой причине), то будет установлен возвратдо некоторого значения, в противном случае он будет нулевым

  • paymenttatus может иметь любое значение 1 из 2, ЗАВЕРШЕНО и СДЕЛАНО

Теперь янужно запросить, чтобы перечислить следующие данные для каждого продукта в таблице продуктов

 productid       name       totalsales      affsales        refunds

     1           AAA           0               0               0
     2           BBB           1               1               1
     3           CCC           4               2               1
     4           DDD           0               0               0 
     5           EEE           2               1               1

totalalsales: продажи с параметром paymenttatus как «ЗАВЕРШЕНО»

affsales: продажи с paytatus как «ЗАВЕРШЕНО» и affiliateidНЕ РАВНО 0

возвратов: продажи со статусом платежей как «ЗАВЕРШЕНО» и с возвратом НЕ НУЛЬ

Как я могу сформировать этот конкретный запрос?

1 Ответ

2 голосов
/ 26 июня 2011
select 
      p.name,
      SalesSummary.productid,
      COALESCE( SalesSummary.TotalSales, 0 ) TotalSales 
      COALESCE( SalesSummary.AffSales, 0 ) AffSales 
      COALESCE( SalesSummary.Refunds, 0 ) Refunds 
   from
      product p
         left join
            ( select s.productid,
                    count(*) TotalSales 
                    sum( if( s.affiliateID > 0, 1, 0 )) affSales,
                    sum( if( ifnull( s.RefundID, 0 ) > 0, 1, 0 )) Refunds
                 from 
                    sales s
                 where
                    s.PaymentStatus = 'COMPLETED'
                 group by
                    s.productid
            ) SalesSummary
         on p.id = SalesSummary.productid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...