with pro(c_id, f_id) as ( select pro_c_id c_id, group_concat(distinct pro_pif_id order by pro_pif_id) f_id from property where pro_type = 3 group by pro_c_id )
时间: 2024-04-23 09:25:51 浏览: 17
这是一个 MySQL 中的公用表表达式(CTE)语句,用于创建一个名为 pro 的临时表。该表包含两个字段:c_id 和 f_id,分别表示用户 ID 和持有的基金 ID。查询中使用了 group_concat 和 distinct 函数,分别用于将每个用户持有的基金 ID 按照升序排列并去重,最终返回一个逗号分隔的字符串。该语句首先从 property 表中筛选出 pro_type = 3 的记录,即持有基金的记录,并按照用户 ID 和基金 ID 分组。然后,在 SELECT 语句中使用 group_concat 函数将每个用户持有的基金 ID 拼接成一个字符串,并赋值给 f_id 字段。最终,该语句返回一个临时表 pro,供后续查询使用。
相关问题
ith pro(c_id, f_id) as ( select pro_c_id c_id, group_concat(distinct pro_pif_id order by pro_pif_id) f_id from property where pro_type = 3 group by pro_c_id ) select t1.c_id c_id1, t2.c_id c_id2 from pro t1, pro t2 where t1.c_id < t2.c_id and t1.f_id = t2.f_id;
这是一个SQL查询语句,它使用了子查询和自连接来查找拥有共同f_id的不同c_id的组合。
首先,在with子句中定义了一个名为pro的子查询,它从property表中选择所有pro_type为3的记录,然后按pro_c_id进行分组,并使用group_concat函数将每个组中的pro_pif_id连接成一个字符串,保存在f_id列中。
然后,在主查询中,使用自连接将pro表与自身连接起来,找出所有拥有相同f_id但不同c_id的组合。最后,使用where子句过滤掉重复的组合。查询结果包括两个列:c_id1和c_id2,分别表示两个拥有共同f_id的不同c_id。
总的来说,这个查询是用来查找投资基金(pro_type=3)的投资者之间是否存在共同的投资项目(f_id相同),如果存在,则返回这些投资者的组合。
mysql中 GROUP_DISTINCT_CONCAT
很抱歉,MySQL中没有GROUP_DISTINCT_CONCAT函数。但是,MySQL中有GROUP_CONCAT函数,可以用于将分组后的结果连接成一个字符串。GROUP_CONCAT函数的语法如下:
```
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
```
其中,DISTINCT是可选的,用于去重;expr是要连接的列或表达式;ORDER BY子句用于指定连接后的结果的排序方式;SEPARATOR用于指定连接后的结果的分隔符。
以下是一个示例,演示如何使用GROUP_CONCAT函数将goods_cat表中pid为25的记录的cat_id连接成一个字符串:
```
mysql> SELECT GROUP_CONCAT(cat_id) FROM goods_cat WHERE pid = 25;
```
输出结果为一个字符串,其中包含了pid为25的记录的cat_id字段的值,这些值用逗号分隔。