2017-09-14 14 views
0

私は2つのテーブルinvoicesproductsを持っています。関連するレコードの数でグループ分けする方法

invoices: store, 
products: id, invoice_id 

商品の数量ごとにいくつの請求書が存在するかを示す結果セットが必要です。

I店Aに3つの製品それぞれに2枚の請求書を持っている場合、私は意味し、それはStore: A, Products qty: 3, Number of invoices (with three products): 2

別の例を示すであろう。

| store | products_qty | count | 
| A |  1  |  10 | 
| A |  2  |  7  | 
| A |  5  |  12 | 
| B |  5  |  12 | 

意味、店舗Aは、1つの製品と10枚の請求書を有しています。私のような何かを試してみた5つの製品...

との2つの製品、および12と7:私のグループの原因は有効ではありませんが

SELECT store, count(p.id), count(i.id) FROM invoices i 
LEFT JOIN products p ON (p.invoice_id = i.id) 
GROUP BY price, count(i.id) 

、それはInvalid use of group functionを示しています。

どうすればこの問題を解決できますか?

+0

p.id' BYちょうど 'GROUP - あなたが言うのcuz:'ストアAは、1つの製品で10枚の請求書を持っています。 2つの製品で7個、5個の製品で12個」と表示されます。 – num8er

+0

、私はそれらをグループ化したい、私はそれをより明確にするために質問を修正各請求書の行を与えるだろう。 –

+0

いいえSQL技術と恋をして、私はinsert/update/deleteイベントを捕まえ、 'store_statistics'コレクションに必要な情報を集約するアグリゲータプロセスを書いていきます。 )mysqlトリガでもこれをやる方が良いと思う) – num8er

答えて

0

私はそれなしで可能である場合、私は疑問に思う、サブクエリを使用して行うことができました:

SELECT store, products_qty, count(*) FROM (
    SELECT store, count(p.id) as products_qty, count(i.id) as invoices_count 
    FROM invoices i 
    LEFT JOIN products p ON (p.invoice_id = i.id) 
    GROUP BY price, i.id 
) AS temp GROUP BY store, products_qty; 
+0

私はこのようなものを書こうとしていました(: – num8er

関連する問題