次元 (Kimball) データ ウェアハウスを構築しようとしていますか? その場合、いくつかの変更を加えることができます。
(1) dateWiseData は必要ありません。
(2) デバイスでは total_impressions は必要ありません。
(3) advertiserData に total_impressions は必要ありません。
モデルが次のようになることをお勧めします。
calendar (id, cal_date, cal_year, cal_month, ... )
device (id, name)
advertiser (id, name)
impression (calendar_id, device_id, advertiser_id, impression_count)
これは、ファクトが複数のインプレッションを持つ可能性があることを前提としています。これが正しくない場合、「事実のない事実」と呼ばれるものがあり、表は次のようになります。
impression (calendar_id, device_id, advertiser_id)
たとえば、特定の日付のデバイス別の合計インプレッション数を計算するクエリを実行できるようになりました。
select device.name,count(*)
from impression
inner join device on device.id = device_id
inner join calendar on calendar.id = calendar_id
where calendar.cal_date = '2016-02-08'
group by device.name;
それはあなたの要件を満たしていますか?
編集:以下の質問に答えてください。
その場合、ファクト テーブルの最初の形式が必要です。
impression (calendar_id, device_id, advertiser_id, impression_count)
広告主別にインプレッションを検索するクエリは次のようになります。
select advertiser.name,sum(impression_count)
from impression
inner join advertiser on advertiser.id = advertiser_id
inner join calendar on calendar.id = calendar_id
where calendar.cal_date = '2016-02-08'
group by advertiser.name;
合計をどこかに持ち込もうとすると、苦痛の世界に陥ります。