如何总结不同的财产权重? [英] How to sum up different property weights?
问题描述
我正在尝试获得两个属性的总和(按权重),最后将它们合并成一个合并的权重.
I am trying to get two properties sum (with weight) and combine them finally into a combined weight.
因此,首先进行单独的查询,以便可以看到正确的总和权重
So, first the separate queries, so you can see the correct sum weights
-
Language = French
,6级以上(1-10级):
Language = French
, Proficiency over 6 (scale 1-10):
MATCH (User)-[Speaks]->(Language)
WHERE Language.language = 'French' AND Speaks.proficiency >=6
RETURN User.name, SUM(
CASE
WHEN Language.language='French' THEN Speaks.proficiency*3
END )*0.1 AS TOTAL_Language
ORDER BY TOTAL_Language DESC
用户名TOTAL_Language 大卫3 马里恩1.8
User.name TOTAL_Language David 3 Marion 1.8
Skill = Finance,Banking,IT,Marketing Weight =1 (of 1)
:
MATCH (User)-[IsSkilledIn]->(Skill)
WHERE Skill.skill IN ['Finance','Banking','IT','Marketing']
RETURN User.name, SUM(
CASE
WHEN Skill.skill='Finance' THEN IsSkilledIn.weight*10
WHEN Skill.skill='Banking' THEN IsSkilledIn.weight*5
WHEN Skill.skill='IT' THEN IsSkilledIn.weight*8
WHEN Skill.skill='Marketing' THEN IsSkilledIn.weight*1
END )*0.1 AS TOTAL_Skill
ORDER BY TOTAL_Skill DESC
User.name TOTAL_Skill
Eric 1.5
Marion 0.9
David 0.8
Hans 0.8
因此,现在,我尝试将这些查询合并为以下内容:
So now, I tried to combine these Queries into this:
-
French >=6 AND Skills Finance,Banking,IT,Marketing
:
MATCH (User)-[Speaks]->(Language) , (User)-[IsSkilledIn]->(Skill)
WHERE Language.language = 'French' AND Speaks.proficiency >=6 AND Skill.skill IN ['Finance','Banking','IT','Marketing']
RETURN User.name, SUM(
CASE
WHEN Language.language='French' THEN Speaks.proficiency*3
END )*0.1 AS TOTAL_Language,
SUM(
CASE
WHEN Skill.skill='Finance' THEN IsSkilledIn.weight*10
WHEN Skill.skill='Banking' THEN IsSkilledIn.weight*5
WHEN Skill.skill='IT' THEN IsSkilledIn.weight*8
WHEN Skill.skill='Marketing' THEN IsSkilledIn.weight*1
END )*0.1 AS TOTAL_Skill
ORDER BY TOTAL_Skill DESC
现在我得到了这些结果:
Now I got these results:
User.name TOTAL_Language TOTAL_Skill
Marion 3.6 0.9
David 3 0.8
Marion的TOTAL_Language
是第一个答案的两倍.
The TOTAL_Language
of Marion is twice as high as the first answer.
所以我检查了可能出问题的地方,它一定在WHERE-Clause中,但是我不知道出了什么问题.
So I checked what could be wrong and it must be in the WHERE-Clause, But I don't know what's wrong.
最后如何总结两个结果?
How can I sum up the two results in the end?
推荐答案
另一种选择是仍然对一个查询执行此操作,但要收集一个人的技能,然后对技能权重的集合求和,而不是对行求和,
Another option is to do it still with one query, but collect the skills for a person, and sum the collection of skill weight as opposed to sum the rows,
MATCH (User)-[Speaks]->(Language), (User)-[IsSkilledIn]->(Skill)
WHERE Language.language = 'French'
AND Speaks.proficiency >=6
AND Skill.skill IN ['Finance','Banking','IT','Marketing']
WITH User.name as userName,
(CASE WHEN Language.language='French'
THEN Speaks.proficiency*3 END) as languageProficiency,
collect(CASE
WHEN Skill.skill='Finance' THEN IsSkilledIn.weight*10
WHEN Skill.skill='Banking' THEN IsSkilledIn.weight*5
WHEN Skill.skill='IT' THEN IsSkilledIn.weight*8
WHEN Skill.skill='Marketing' THEN IsSkilledIn.weight*1
END) as skillWeightCollection
RETURN userName,
sum(languageProficiency)*0.1 as TOTAL_Language,
reduce(totalSkill = 0, skillWeight in skillWeightCollection |
totalSkill + skillWeight) * 0.1 as TOTAL_SKILL
这篇关于如何总结不同的财产权重?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!