如何总结不同的财产权重? [英] How to sum up different property weights?

查看:91
本文介绍了如何总结不同的财产权重?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试获得两个属性的总和(按权重),最后将它们合并成一个合并的权重.

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

  1. Language = French,6级以上(1-10级):

  1. 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:

  1. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆