2010-12-06 2 views
1

У меня есть таблица с именем «продажи» со следующими полямиMySQL множественный счетчик в одном запросе

salesid (type: int) 
stime (type: datetime) 
status (type: enum, values: remaining OR cancelled OR done) 
... and other fields 

Мне нужен запрос, который может выводиться как

SalesDate  TotalSales TotalDone  TotalRemaining  TotalCancelled 
2010-11-06  10    5    3     2 
2010-11-06  15    14    1     0 

Кто знает, как этого добиться?
Помогите оценить, спасибо.

ответ

1

Используйте CASE заявление в вашем SELECT для создания псевдо-столбцы, используя значения из remaining, cancelled и done

SELECT  
    date(stime), 
    COUNT(salesid), 
    SUM(CASE status WHEN 'done' THEN 1 ELSE 0 END) as TotalDone, 
    SUM(CASE status WHEN 'remaining' THEN 1 ELSE 0 END) as TotalRemaining, 
    SUM(CASE status WHEN 'cancelled' THEN 1 ELSE 0 END) as TotalCancelled 
FROM sales 
GROUP BY date(stime) 

Примечание: Это то, что я пытался ссылаться. Я думаю, что это должно работать, но у меня нет доступа к MySQL, чтобы попробовать синтаксис и проверить его. Извини за это. Но это должно заставить вас идти.

+0

Не могли бы вы объяснить подробно, спасибо. – 2010-12-06 07:42:17

3

Вы можете использовать условное суммирование, чтобы получить нужные результаты.

select stime as sales_date 
     ,sum(1) as total_sales 
     ,sum(case when status = 'remaining' then 1 else 0 end) as total_done 
     ,sum(case when status = 'cancelled' then 1 else 0 end) as total_remaining 
     ,sum(case when status = 'done'  then 1 else 0 end) as total_cancelled 
    from sales 
group by stime; 

Вы также можете использовать COUNT (ехрга) и использовать тот факт, что не включает в себя NULLS, но лично я считаю, что выше лучше всего передает намерения разработчика.

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