[英]SQL: aggregate function in select statement with a join involving group by clause
我有兩個具有以下屬性的表:
t1 t2
source domain date rank domain date
--- --- --- --- --- ---
A google 2008-10-24 1 google 2007-10-20
A facebook 2010-05-17 1 google 2009-02-21
B google 2007-05-14 2 facebook 2008-04-13
B google 2012-01-05 2 facebook 2012-09-12
B facebook 2014-03-23 2 facebook 2015-04-01
我試圖找到的時間差的B / W每個第一(最早)發生domain
在t2
與他們的第一次出現(基於date
的) t1
。
以下查詢給了我所需的結果:
select t2.domain, datediff(min(t1.date),min(t2.date))
from t1 join t2
on t1.domain = t2.domain
group by t2.domain
現在,如果我想計算所有域之間的日期差的平均值(僅針對它們的首次出現),則此部分會在select語句中給出錯誤(查詢的其余部分與上面相同):
select avg(datediff(min(t1.date),min(t2.date))) ...
任何想法如何在這里糾正錯誤(無效使用組功能)?
另外,我想按source
計算平均日期差組。 這樣的輸出應為:
source avg_datediff
--- ---
A some_value
B some_value
就像上面一樣,對於給定源中的多個相同域,在計算平均日期差時,我只需要考慮該源最早域的日期。
使用子查詢:
select avg(days)
from (select t2.domain, datediff(min(t1.date), min(t2.date)) as days
from t1 join
t2
on t1.domain = t2.domain
group by t2.domain
) tt;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.