这是我的数据库表的示例:
visitor_id ---- url ---- duration
1 ------------ home ------- 5
1 ------------ about ------ 8
1 ------------ about ------ 3
1 ------------ contact ---- 2
1 ------------ home ------- 3
1 ------------ services --- 2
我想要实现的是显示超过所有网址平均值的网址。但首先我需要通过网址对持续时间组进行求和。
例如,所有页面的平均值= 5 + 8 + 3 + 2 + 3 + 2 = 23/6 = 3.8
因此,将显示的页面是家庭(8秒)和大约(11)。
我怎样才能做到这一点?
这是我到目前为止所拥有的
select sum(duration), url from pages where visitor_id='1' group by url
答案 0 :(得分:0)
您可以join
平均值或使用having
子句。我会把它写成:
select p.visitor_id, p.url, avg(p.duration)
from pages p
where visitor_id = 1
group by p.visitor_id, p.url
having avg(p.duration) > (select avg(p2.duration)
from pages p2
where p2.visitor_id = p.visitor_id
);
注意:
visitor_id
是数字,所以常数是数字而不是字符串。having
子句中的子查询与外部查询相关,因此访问者ID只输入一次。答案 1 :(得分:0)
您可以在子查询上使用for avg
select sum(duration) sum_dur, url
from pages
where visitor_id='1'
group by url
having sum_dur > (
select avg(duration)
from pages
where visitor_id='1'
)
答案 2 :(得分:-1)
试试这个:
Select url
,visitor_id
,duration
From (
select url
,visitor_id
,sum(duration) as duration
,avg(duration) over (partition by visitor_id) as avg_by_visitor_id
from pages
group by url
,visitor_id
,duration) as data
where data.avg_by_visitor_id<=data.duration