2010-12-06 14 views
1

私はMySQLの複数のカウント

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

として出力はこれを実現する方法を誰もが知っていることができ、クエリを必要とする次のフィールド

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

での販売 'という名前のテーブルがありますか?
感謝、ありがとうございます。

答えて

1

remaining, cancelleddone

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) 

ノートのステータス値を使用して疑似列を作成するためにあなたのSELECTCASEステートメントを使用します。これは私がを参照しようとしていたものです。私はこれがうまくいくはずだと思うが、私は構文を試して検証するためにMySQLにアクセスできない。申し訳ありません。しかし、これはあなたを得る必要があります。

+0

詳細は、ありがとうございます。 –

+0

+1はうまく動作するすっきりしたソリューションです。 – Mike

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(exprの)を使用し、それがNULLSが含まれていない事実を悪用し、個人的に私は上記の最高の開発者の意図を伝えることを見つけることができます。