1

它困扰了我很长时间。我喜欢使用具有多个不同的配置单元聚合,如下所示:

select count(case when pv=1 then 1 else null end), count(distinct case when pv=1 and uid>1 then uid else null end), count(distinct component), count(message) from log_table; 

这将导致只有1 个减速器,这会使工作非常长时间。由于大多数工作都在减速机工作

不适合使用像下面这样的子查询,因为有几个不同的列。

 select count(1) from (select v from tbl group by v) t. 

优化这个问题的任何好主意。只需要拆分成几个查询然后加入吗?

谢谢!

4

1 回答 1

0

你有没有尝试过这样的事情:

select
 sum(a.pv_cnt),
 count(a.uniq_uids),
 count(a.uniq_uids),
 sum(a.msg_cnt)
from
  (
   select
     case when pv=1 then 1 else 0 end  as pv_cnt,
     distinct ( case when pv=1 and uid>1 then uid ) as uniq_uids,
     component,
     count(message) msg_cnt;
   from
    log_table
  )a;
于 2013-06-10T22:21:46.673 回答