2012-04-29 10 views
0

ネストされたクエリに関するNoobの質問。このSQLクエリに少し問題があります。助けてください。同じテーブル内の2つのフィールドをCOUNTにしようとし、月、年ごとにグループ化します。クエリは、新しいフィールドと更新フィールドで同じ結果を返します。ネストしたMYSQLグループ年:MONTH、YEAR

SELECT MONTH(p.created_at) as Month, YEAR(p.created_at) as Year, 
    (SELECT COUNT(p.id) FROM payments p 
INNER JOIN carts c ON c.payment_id = p.id 
INNER JOIN cart_items ci on ci.cart_id = c.id 
WHERE ci.item_id = 8) as 'New', 
    (SELECT COUNT(p.id) FROM payments p 
INNER JOIN carts c ON c.payment_id = p.id 
INNER JOIN cart_items ci on ci.cart_id = c.id 
WHERE ci.item_id = 13) as 'Renewal',  
FROM payments p 
GROUP BY month, year 

ありがとうございます!

クエリExpample

Month Year New Renewal 
1  2010 1169 556 
1  2011 1169 556 
1  2012 1169 556 
2  2010 1169 556 
2  2011 1169 556 
+0

サンプルデータを提供すると、より簡単に回答できます。このクエリの結果が何であるか、どのような結果が得られたかを教えてください。 –

+0

はい、いくつかのサンプルデータを表示してください。また、サブクエリを取り出して単独で実行するとどうなりますか?唯一の違いは 'ci.item_id'が8または13であるようです。これはあなたのデータベースの 'new'または' renewal'の正しい番号ですか? – Daan

+0

上記のクエリのサンプルデータを追加しました。 Item_id = 8はdbで新しく、13はdbで更新されます。私が2番目の製品を追加せずにシンプルな選択を引っ張っても、私が望むようにすべてのデータが出てきます。 @nishantの回答が – tumolo

答えて

0

私はあなたが様々な可能購入可能アイテムを保持している項目のテーブルを持って推測しているクエリを見てから。そのうちのitem_id = 8は「New」製品に対応し、item_id = 13は「Renewal」に対応する。

アイテムは、cart_itemsという関係テーブルの予定販売のイベントに関連付けられています。

しかし、すべてのカートが販売されているわけではありませんが、実際に販売されているカートのみを見たいので、支払いテーブルから始めます。

支払い予定の有無は、payment_idに入力することによってカートテーブルに記録されます。

お支払いは、販売されたカートを表し、支払いからpayment.idを取得し、支払いテーブルにcart_idを取り、cart_itemsテーブルに取得したcart_idを取得し、私たちは、全体の取得

SELECT MONTH(p.created_at) as Month, 
     YEAR(p.create_at) as Year, 
     sum(if(ci.item_id = 8, 1, 0)) as New, 
     sum(if(ci.item_id = 13, 1, 0)) as Renewal 
    FROM payments p, 
     INNER JOIN carts c on c.payment_id = p.id 
     INNER JOIN cart_items ci on ci.cart_id = c.id 
WHERE ci.item_id in (8,13) 
GROUP BY month, year; 

:ITEM_IDは8(「新」)/ 13(「リニューアル」)

であれば、我々は、我々はその後、実行しようとしているクエリがある個別にカウントしたいですグループ化するフィールドをグループ化し、item_id = 8/item_id = 13と表示された回数を数えて合計します。

私は問題のドメインを誤解している可能性がありますので、明確にする必要がある場合や問題が生じた場合はお知らせください。

+0

のように見えますが、上記のクエリのおかげで、あなたは完璧に理解しました。クエリーのif文を忘れました。 if文の1、0を説明できますか? – tumolo

+0

しばらくごめんなさい。 if条件を満たすものだけを数えたいので、trueの場合は1、falseの場合は0に設定します。次に、countの代わりにsum関数を使用すると、conditionがtrueの場合の値のカウントが取得されます。それは役に立ちますか? –