2016-03-06 3 views
2

У меня есть таблица SalesInvoice. В этой Дате, Режим суммы являются важными столбцами в этой таблице.Таблица групп и подгрупп в MySQL Выберите

SNo   BID   iDate   Amount   Mode 
---------------------------------------------------------------- 
101    1   2016-01-01  200   Cash 
102    2   2016-01-01  500   Credit 
103    5   2016-01-01  800   credit 
104    8   2016-01-01  250   Cash 
105    1   2016-01-01  200   Cash 
106    2   2016-01-02  500   Cash 
107    5   2016-01-03  800   Credit 
108    8   2016-01-03  250   Credit 

Мой Требуемый Выход

iDate  MinSno MaxSno  Total  CreditTotal CashTotal 
---------------------------------------------------------------------- 
2016-01-01  101  105  1950   1300   650 
2016-01-02  106  106  500    0   500 
2016-01-03  107  108  1050   1050   0 

Я попытался MySQL Query

SELECT iDate, Min(SNo) AS MinSno, Max(SNo) AS MaxSno, SUM(Amount) 
From SalesInvoice GROUP By iDate 

Но я не знаю, как получить сумму наличными и кредитной суммы на основе Sub Группа в основной группе iDate. Пожалуйста, помогите мне, как достичь ожидаемой производительности, как указано выше?

+0

'ВЫБРАТЬ Идате AS Дата, Min (SNO) AS MinSno, Макс (SNo) AS MaxSno, (CreditTotal + CashTotal) как Total, (SELECT SUM (Amount) FROM SalesInvoice, где iDate = t1.iDate и Mode = 'Credit' GROUP By iDate) Как CreditTotal, (SELECT SUM (Amount) FROM SalesInvoice, где iDate = t1.iDate и Mode = 'Cash' GROUP By iDate) Как CashTotal От SalesInvoice GROUP By iDate' –

+0

I попробовал это, но это ухудшает производительность, потому что у меня есть 250K записей в таблице. Просьба предоставить оптимальное решение. –

+0

Не могли бы вы добавить индекс на 'iDate' и' Mode', а затем проверить –

ответ

1

Это похоже на работу:

SELECT iDate, min(SNo) as MinSno, max(SNo) as MaxSno, sum(amount) as Total, 
sum(If(MMode = 'Cash',Amount,0)) as Cash, 
sum(If(MMode = 'Credit',Amount,0)) as Credit 
from test.SalesInvoice 
Group By iDate; 

Обратите внимание, что я изменил режим для MMode из-за режима фактически является keywork в MySQL

Смежные вопросы