1

「キャッシュ」テーブルからデータを要約するテーブルを作成しようとしています。集計クエリを数分ごとに実行する予定であるため (cron またはイベントによって、実際には関係ありません)、行の重複を避けるために、サマリー テーブルに既に存在する行を更新する必要があります (私は一意のキーが設定されているため、「キャッシュ」テーブルの値は既存の値と統合されます。

これが私のクエリです:

INSERT INTO  `ReportsSummary` 
                (`date`,
                `txtID`,
                `webID`,
                `GEO`,
                `OSS`,
                `impressions`,
                `clicks`)

SELECT DATE_FORMAT(date ,'%Y-%m-%d'),txtID,webID, GEO, OSS,
    SUM( if(actionType = '1',1,0) ) as add_impressions,
    SUM( if(actionType = '2',1,0) ) as add_clicks
FROM `CacheReports` as t GROUP BY txtID,webID,GEO,OSS

ON DUPLICATE KEY UPDATE
impressions = impressions + (`t`.`add_impressions`),
clicks = clicks + (`t`.`add_clicks`);

乾杯

4

1 に答える 1

4

テーブル t (CacheReports) には add_impressions 列と add_clicks 列はありません。それらを持つのは集計です。以下の修正されたクエリを使用します。

INSERT INTO  `ReportsSummary` 
                (`date`,
                `txtID`,
                `webID`,
                `GEO`,
                `OSS`,
                `impressions`,
                `clicks`)

SELECT * FROM (
  SELECT DATE_FORMAT(date ,'%Y-%m-%d'),txtID,webID, GEO, OSS,
    SUM( if(actionType = '1',1,0) ) as add_impressions,
    SUM( if(actionType = '2',1,0) ) as add_clicks
FROM `CacheReports` as t GROUP BY txtID,webID,GEO,OSS) AS `u`

ON DUPLICATE KEY UPDATE
impressions = impressions + `u`.`add_impressions`,
clicks = clicks + `u`.`add_clicks`;
于 2013-11-10T13:07:04.390 に答える