2011-02-03 22 views
0

私はordersというテーブルを持っています。このテーブルには必要なすべての情報が含まれています。1日ごとにお支払い金額を集計してください

私はちょうど私たちは、クエリのために必要な列リストアップします:それは完全なpurchase_priceを意味する場合1

  • purchase_price(常に順番のために支払った合計金額に含まれている)
  • pay_method((int)をそれはpurchase_priceは現金​​のみに部分的に支払われたことを意味する場合3、他の値が他の支払い手段を意味するので、それらを無視し、現金でのために支払われた。)
  • cash_paidを(pay_methodがとき3210この列には、注文に対して支払われた現金の金額が含まれています。これは合計金額ではなく、現金でお支払いいただいたpurchase_priceの一部です。 pay_methodは、このフィールドの値は0
  • date(順序が置かれた(日時)単に日付+時間)

ある3されていないときのアイデアは非常に単純です。支払われる現金の総額を日ごとにグループ化する必要があります。 しかし、これはかなり難しい作業でした。

PS:これはPHPでMySQLを使用しているので、複数のクエリを使用したり、PHPスクリプトを使用したりしても問題ありません。

+0

私はインターンです。だから、私は教育を終わらせるためにこれをやっています。それは宿題のように感じさせています。 – Pieter888

+0

ああ、ありがとう。私はしばらく前にそのウェブサイトをあきらめました。私はそれを削除します:) – Pieter888

答えて

2

1つのクエリでは、このように試みることができる:ところで

select DATE(date), sum(case when pay_method = 1 then purchase_price else cash_paid end) from orders group by DATE(date) 

を。 mysqlでsum関数の中で "case"を使うことができるかどうかは分かりません。あなたはGROUP BY DAY(date)

+0

は、ケースステートメントの末尾に行方不明が追加されました –

2

pay_methodが1の場合は、purchase_priceフィールドを取ります。それ以外の場合はcash_paidフィールドを使用します。

SELECT DATE(`date`), SUM(IF(pay_method=1,purchase_price,cash_paid)) 
FROM yourtable 
/*WHERE pay_method IN (1,3) -- if you only want those */ 
GROUP BY DATE(`date`) 
+0

あなたは絶対に正しいですが、それは質問のグループ分けを解決するだけなので、受け入れられません。 – Pieter888

1
SELECT *, IF(`pay_method`=1,SUM(`cash_paid`),0) AS Cash_Paid FROM orders o 
GROUP BY DATE(`date`) 

あなたはこれを試してみてくださいすることができます。これはあなたに支払った総現金を与えるでしょう...あなたは別のクエリを作成し、両方を追加することができますpartailly支払現金のために....

関連する問題