2016-06-27 16 views
0

私がしたいのは、注文数と注文ごとの呼び出し数を示すデータセットです。私は同じテーブルの呼び出しの日付と注文の日付が必要です。表は10M +行であるため、結果セットの集約は分析には不可欠です。 私がやりたい唯一の分析は、通話/総注文の合計と、注文範囲内の注文から何件のsupport_ticketsがcall_dateまでであるかを見ることができるようにすることです。非常に単純ですが、驚くほど複雑なコードを書くことができます。ここに私の試みです。私はまた、以下を組合に変更しようとしましたが、依然として誤った集計結果を得ています。SQLでの複雑な集約

-- The Query:- 
SELECT 
category_name 
count(order_code) 
order_date 
sum(support_ticket_call) 
call_date 
FROM 
(Select distinct name, order_code, order_date from table1) b 
left join 
(select count(call_ids), call_date FROM table2) b 
on b.order_ID_code = a.order_id_code 
group by category_name, order_date, call_date 

support_ticket_callsが存在しない場合はいつでも、call_dateは期待通りにNULLです。注文数は60,000と同じですが、残りの結果セットでは通常の12とは異なります。私は何かがこのクエリで間違っていることを知っているが、それは文字通り一日中これまでこれを解決しようとする私を狂った運転しています。

+0

あなたは、サンプルデータおよび所望の結果を提供してもらえますか? – ydoow

答えて

0

サンプルデータや予想される結果がないとこの質問に答えるのは少し難しいですが、コメントは長すぎます。

現在のクエリにはいくつか問題があります。まず、の基準を使用して、日付フィールドのjoinが必要です。また、集計を使用するクエリにgroup byを追加する必要があります。最後に、support_ticket_callはどこから来たのですか?それはcount(call_ids)のエイリアスだと推測できますか?このような

何かあなたが近づく必要があります。

SELECT 
    a.name as category_name, 
    count(a.order_code), 
    sum(b.support_ticket_call), 
    a.order_date as call_date 
FROM 
    (Select distinct name, order_code, order_date 
    from table1) a 
left join 
    (select count(call_ids) as support_ticket_call, call_date 
    from table2 group by call_date) b on a.order_date = b.call_date 
group by a.name, a.order_date 
+0

まず、両方のテーブルに通話日と発注日がありません。また、呼び出し日は注文と同じ日には発生しません – ilovechicago