select p1.pro_c_id, p2.pro_c_id, count(*) as total_count from property as p1 inner join property as p2 on p1.pro_pif_id = p2.pro_pif_id where p1.pro_type = 1 and p2.pro_type = 1 and p1.pro_c_id <> p2.pro_c_id group by p1.pro_c_id, p2.pro_c_id having count(*) >= 2 order by p1.pro_c_id;
时间: 2023-12-20 14:04:55 浏览: 23
这是一个 MySQL 查询语句,用于在 property 表中找出持有同一基金的用户对,并按照第一个用户 ID 排序。查询结果包括两个用户 ID 和持有的基金数量 total_count,其中 p1.pro_c_id < p2.pro_c_id。查询中使用了 INNER JOIN、GROUP BY 和 HAVING 子句。首先,通过 INNER JOIN 将 property 表自连接两次,分别表示两个不同的用户持有的同一基金。然后,限制 p1.pro_type 和 p2.pro_type 均为 1,即持有基金的记录。接着,通过 p1.pro_c_id <> p2.pro_c_id 限制两个用户 ID 不相等,避免重复查询。最后,通过 GROUP BY 子句将结果按照两个用户 ID 分组,并通过 HAVING 子句筛选出持有同一基金的用户对,并且持有基金数量大于等于 2。最终,通过 ORDER BY 子句将结果按照第一个用户 ID 排序。
相关问题
SELECT c.movie_category, COUNT(m.movie_id) as total_movies什么意思
这是一个 SQL 查询语句,它的作用是统计每个电影分类下的电影总数。具体解释如下:
- `SELECT` 表示要选择的数据列。
- `c.movie_category` 表示选择电影分类列。
- `COUNT(m.movie_id)` 表示统计每个电影分类下的电影数量,`m.movie_id` 是电影表中的电影 ID 列。
- `as` 是起别名的关键字,将 `COUNT(m.movie_id)` 统计结果的列命名为 `total_movies`。
- 最后,该查询语句返回一个结果集,包含每个电影分类和该分类下的电影总数。
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
这是一个SQL语句,用于查询拥有相同产品的公司,并找出其中拥有相同产品数量前两名的公司组合。具体的查询条件是:
首先从属性表中选择属性类型为1的记录,并根据产品ID(pro_pif_id)和公司ID(pro_c_id)进行去重,将结果作为t1表。
然后从t1表中选择公司ID和产品ID,并根据产品ID进行去重,将结果作为t2表。
接下来将t1表和t2表进行join操作,条件是t2表中的产品ID等于t1表中的产品ID,并且t2表中的公司ID不等于t1表中的公司ID。然后根据t1表中的公司ID和t2表中的公司ID进行分组,并计算它们拥有的相同产品数量,将结果作为t3表。
在t3表中,按照拥有相同产品数量从大到小排序,并且如果数量相同,则按照公司ID从小到大排序,最终计算每个公司排名值,将结果作为t4表。
最后在t4表中,选择排名值小于2的记录,并返回公司ID、共同产品数量以及它们的排名值。