簡體   English   中英

如何對相同的行求和並找到在MySQL中高於平均水平的行?

[英]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被輸入一次。
  • 該查詢按訪問者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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM