select * from ( select *, rank() over(partition by pac order by common desc,pbc asc) as crank from ( select distinct t1.pro_c_id as pac, t2.pro_c_id as pbc, count(t2.pro_c_id) as common from property as t1 join ( select distinct pro_c_id, pro_pif_id from property where pro_type = 1 )as t2 on t2.pro_pif_id = t1.pro_pif_id where pro_type = 1 and t2.pro_c_id <> t1.pro_c_id group by t1.pro_c_id, t2.pro_c_id ) as t3 ) as t4 where crank <3
时间: 2024-02-14 10:34:02 浏览: 48
Oracle查询中OVER (PARTITION BY ..)用法
这是一个 MySQL 查询语句,用于查找所有在 property 表中持有相同基金的用户对,并按照用户 ID 排序。查询结果包括两个用户 ID 和他们共同持有的基金数量。查询中使用了窗口函数和嵌套查询。首先,在子查询中,通过关联 property 表自身,找出所有持有相同基金的用户对,并统计他们共同持有的基金数量。然后,在外层查询中使用 rank() 窗口函数,按照共同持有基金数量和第二个用户 ID 升序排序,并为每个用户对分配排名。最后,在外层查询中筛选排名小于 3 的用户对,即共同持有基金数量前两名的用户对。
阅读全文