2

同じテーブルからすべてのサブクエリを取得していますが、a列からの情報が必要です。b.7dayclicksc.7dayclicksd.14dayclicks

クエリは次のようになります。

select
  a.higher_tier_id,
  a.lower_tier_id,
  b.7dayclicks,
  c.7dayclicks,
  d.14dayclicks
from
  a,
  (select higher_tier_id, 7dayclicks
   from a
   where day >= curdate() - 7
   group by higher_tier_id) b,
  (select lower_tier_id, 7dayclicks
   from a where day >= curdate() - 7
   group by lower_tier_id) c,
  (select lower_tier_id, 14dayclicks
   from a where day >= curdate() - 14
   group by lower_tier_id) d
where
  day >= curdate() - 3 
  and a.higher_tier_id = b.higher_tier_id
  and a.lower_tier_id = c.lower_tier_id
  and a.lower_tier_id = d.lower_tier_id

その結果、実行に非常に長い時間がかかります。効率化を図っています。どんな助けでも大歓迎です。

  • 1列目はhigher_idを示します
  • 2列目はlower_idを示します
  • 3 列目は、higher_id レベルで並べ替えられた 7 日間のクリック数を示します
  • 4 列目は、lower_id レベルで並べ替えられた 7 日間のクリック数を示します
  • 5 列目は、lower_id レベルで並べ替えられた 14 日間のクリック数を示します

結合せずにすべてをまとめる方法は間違いなくあると思いますが、方法がわかりません..

4

1 に答える 1

0

このようなものは機能しますか?上位層と下位層の ID を取得し、7 日間のクリック数と 14 日間のクリック数の合計を取得します。

select
  a.higher_tier_id,
  a.lower_tier_id,
  SUM(CASE WHEN day >= curdate() - 7 THEN 7dayclicks ELSE 0 END),
  SUM(CASE WHEN day >= curdate() - 14 THEN 14dayclicks ELSE 0 END)
FROM a
GROUP BY a.higher_tier_id, a.lower_tier_id
于 2012-12-19T20:25:33.427 に答える