2017-07-15 22 views
0

を持つ仮想サブクエリフィールド(別のSUMを使用)上のMySQL SUM 請求書およびの項目があります。GROUP BY

id | timest 

アイテム

id | invoice_id | price | qty 

請求書が複数の項目を有していてもよいが明らかである - items.invoice_id = invoices.id

私は彼らの項目の合計ですべての請求書を選択し、次の問合せをしている:今、私はまでの期間でグループそれにしたい

id| _period | total 
------------------- 
1 | 2014-06 | 100 
4 | 2014-06 | 200 
5 | 2014-07 | 660 
6 | 2014-07 | 300 
7 | 2014-07 | 30 
9 | 2015-02 | 225 

SELECT id, DATE_FORMAT(FROM_UNIXTIME(inv.time), "%Y-%m") AS _period, 
(SELECT SUM(it.price*it.quantity) FROM items AS it WHERE it.invoice_id=inv.id) as total 
FROM `invoices` `inv` 

これは、のようなものを生成

_period | qty | total_price 
--------------------------- 
2014-06 | 2 | 300 
2014-07 | 3 | 990 
2015-02 | 1 | 224 

として数量欄で簡単にできます

SELECT DATE_FORMAT(FROM_UNIXTIME(inv.time), "%Y-%m") AS _period, 
COUNT(inv.id) as qty 
FROM `invoices` `inv` 
GROUP BY _period 
しかし、サブクエリ仮想フィールドの結果であるtotal_priceフィールドでも同様のことが実行される可能性はありますか?誰にも分かりますか?

ありがとうございました!あなたがLEFT JOINGROUP BYを使用して、これを行う必要があります

答えて

0

SELECT DATE_FORMAT(FROM_UNIXTIME(i.time, '%Y-%m') AS _period, 
     COUNT(DISTINCT i.id) as num_invoices 
     SUM(i.price * it.quantity) as total 
FROM invoices i LEFT JOIN 
    items it 
    ON it.invoice_id = i.id 
GROUP BY _period 
ORDER BY _period; 
+0

ありがとうございました!これは完璧に機能しました! –

0

クエリからサブテーブルを作り、この

SELECT InnerTable._period, Count(InnerTable.id) as id, Sum(InnerTable.total) as total FROM 
    (SELECT id, DATE_FORMAT(FROM_UNIXTIME(inv.time), "%Y-%m") AS _period, 
(SELECT SUM(it.price*it.quantity) FROM items AS it WHERE it.invoice_id=inv.id) as total 
FROM `invoices` `inv`) as InnerTable FROM GROUP BY InnerTable._period. 

を試してみて、それにしてグループを置きます。