[英]How to sum same rows and find those that are above average in mySQL?
這是我的數據庫表的示例:
visitor_id ---- url ---- duration
1 ------------ home ------- 5
1 ------------ about ------ 8
1 ------------ about ------ 3
1 ------------ contact ---- 2
1 ------------ home ------- 3
1 ------------ services --- 2
我要實現的是顯示比所有URL均值還要多的URL。 但是首先我需要對持續時間進行匯總。
例如,所有頁面的平均值= 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
您可以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被輸入一次。 您可以將Have on子查詢用於平均值
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'
)
嘗試這個:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.