在presto中交叉引用列表或对彼此的记录

时间:2016-03-15 11:27:39

标签: sql presto

我正在尝试交叉引用一个表格。

我有一张假日目的地表,以及查看这些目的地的唯一用户ID。

我想,对于每个目的地(例如A),将其与所有其他目的地(例如B-Z)进行交叉引用,并计算有多少用户看过A也看了B - 就像这样:

Location 1 | Location 2 | Users looking at 1 | Users looking at 2 who looked at 1

到目前为止,我可以获得位置1和用户查看位置1:

select * from (select A.location, count(distinct(A.user)) as the_count from (
    SELECT 
      location, distinct(user)
    FROM
      search
  ) as A group by A.location

我认为我需要进行某种类型的条件连接,我只是可以解决如何将该选择的每个结果与其他所有结果相加,并包括用户寻找的A的子集第一栏中的位置。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

PrestoDB非常接近标准SQL。在标准SQL中,您可以这样做:

select l1.location as location1, l2.location as location1,
       count(distinct s2.user)
from location l1 join
     location l2
     on l1.location < l2.location left join
     search s1
     on s1.location = l1.location left join
     search s2
     on s2.location = l2.location and
        s2.user = s.user
group by l1.location, l2.location;