表包含2个字段
date userid
2009-06-01 mike
2009-06-01 tom
2009-06-01 rose
2009-06-02 mike
2009-06-02 jake
2009-06-03 tom
2009-06-03 mike
。。
如上表,date记录了日期,userid记录了该日期中登录过的用户id
现在需要知道,这些用户上线的忠诚度,也就是,按天统计,哪些用户天天上线,上线频度。
例如
我查看2009-05-01 到 2009-06-01 这一个月间中,按照上线次数多少 排序显示。
例如:
2人(2个userid) 29次
3人 22次
10人 18次
18人 12次
这样的一个结果。表明这一个月中来过29次的有2个userid,来过22次的有三个id
我想问一下,这个能否用sql语句解决?如果能需要分几步,应该怎样写这个sql
期待大家帮助,谢谢!
date userid
2009-06-01 mike
2009-06-01 tom
2009-06-01 rose
2009-06-02 mike
2009-06-02 jake
2009-06-03 tom
2009-06-03 mike
。。
如上表,date记录了日期,userid记录了该日期中登录过的用户id
现在需要知道,这些用户上线的忠诚度,也就是,按天统计,哪些用户天天上线,上线频度。
例如
我查看2009-05-01 到 2009-06-01 这一个月间中,按照上线次数多少 排序显示。
例如:
2人(2个userid) 29次
3人 22次
10人 18次
18人 12次
这样的一个结果。表明这一个月中来过29次的有2个userid,来过22次的有三个id
我想问一下,这个能否用sql语句解决?如果能需要分几步,应该怎样写这个sql
期待大家帮助,谢谢!
select count(num),num from (
select count(userid ) Num ,userid from table where to_char(date,'YYYY-MM-DD' )>2009-05-01 and to_char(date,'YYYY-MM-DD' )<'2009-06-01'
group by userid
)a
group by num
LZ看是不是这个意思
select count(userid ) num ,userid from table
where to_char(date,'YYYY-MM-DD' )>=2009-05-01
and to_char(date,'YYYY-MM-DD' )<'2009-06-01'
group by userid
)a
group by num
我还有个问题。真实表数据量很大,每天有20万条,这样统计一个月的时候,会特别慢,要几十秒才能查出来。
这有什么办法能提高效率吗?
COUNT(NUM), NUM
FROM (SELECT /*+PARALLEL(TABLE,10)*/
COUNT(USERID) NUM, USERID
FROM TABLE
WHERE TO_CHAR(DATE, 'YYYY-MM-DD') > '2009-05-01'
AND TO_CHAR(DATE, 'YYYY-MM-DD') < '2009-06-01'
GROUP BY USERID) A
GROUP BY NUM