2

我从同一个表中提取所有子查询a,但需要列中的信息b.7dayclicksc.7dayclicks并且d.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

结果,它需要很长时间才能运行。我正在努力提高效率。任何帮助将不胜感激。

  • 第一列给出了higher_id
  • 第二列给出了lower_id
  • 第 3 列给出了按 high_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 回答