我已经搜索了这个主题并找到了很多线索,但是我很抱歉我找不到解决方案/想法。
我有一张桌子如下
姓名-技术
Res1 = Java
Res1 x- MySQL
Res2 = Java
Res3 = Java
Res3 = PHP
Res3 x- MySQL
Res4 x- MySQL
Res4 = PHP
以此类推。
我想构建一个关系表,作为
名称@ similarResource
Res1 x- Res3
Res2 = Res1,Res3
Res3 = null
Res4 x- Res3
这是为了了解池中的类似资源。我尝试用游标创建存储过程,但无法继续。
我想要建立的步骤,
发布于 2014-06-23 22:06:19
为了满足类似的res必须拥有所有匹配技术的要求,您可以使用内联视图比较匹配技术的计数
SELECT counts.name,
Group_concat(matchCount.name) simliarName
FROM (SELECT name,
Count(technology) techCount
FROM table1
GROUP BY name) counts
LEFT JOIN (SELECT t1.name t1_name,
t2.name,
Count(t2.technology) matchingTech
FROM table1 t1
JOIN table1 t2
ON t1.technology = t2.technology
AND t1.name != t2.name
GROUP BY t1.name,
t2.name) matchCount
ON counts.name = matchcount.t1_name
AND counts.techcount <= matchCount.matchingtech
GROUP BY counts.name 演示
发布于 2014-06-23 20:50:05
将表连接到自己,并使用group_concat函数创建列表:
select x.name, group_concat(distinct y.name2) as similarResource
from (select name, count(*) c from mytable group by 1) x
join (select t.name, s.name name2, count(*) c
from mytable t
join mytable s on t.technology = s.technology
and t.name != s.name
group by 1, 2) y on x.name = y.name
where y.c >= x.c
group by 1请参见现场演示,它使用示例数据提供了以下输出:
NAME SIMILARRESOURCE
Res1 Res3
Res2 Res1,Res3
Res4 Res3请注意,此查询的输出不包括Res3 | Res4,因为Res4没有"java“(您的示例数据丢失了一些行,或者我误解了这个问题)。
https://stackoverflow.com/questions/24374925
复制相似问题