我想计算每种职业的每种技能的百分比。我做了a有不同的节点占用和Soft_skills它们有关系[r:MAPS_TO]该关系有两个属性类型('essentieel','optioneel')和b(这种权重essentieel = 1.0和optioneel = 0.5)
请参阅下面我正在使用的文件的示例
职业 | 职业代码 | 技能代码 | 姓名 | 类型 | 乙 |
---|---|---|---|---|---|
博士 | sk_565 | sk_687 | 勒伦 | 选项 | 0.5 |
博士 | sk_565 | sk_687 | 勒伦 | 选项 | 0.5 |
博士 | sk_565 | sk_687 | 勒伦 | 精华 | 1.0 |
博士 | sk_565 | sk_687 | 勒伦 | 精华 | 1.0 |
我做了一个查询,可以计算每个职业的总和,请参阅下面的查询:
match (b:BOC_beroep)-[r:MAPS_TO]-(s:Soft_Skill)
return b.beroepstitel as beroep,
sum(toFloat(r.b)) as sum order by sum desc
limit 10
这是我的输出
贝罗普 | 和 |
---|---|
多克 | 5 |
卡珀 | 7 |
知道我想要达到我计算的技能类型的百分比
Dokter have in total 4 skills en the percentage of each skill is
2/4 * 100 = 50% essentieel
1/4 * 100 = 25% optioneel
i was trying to make a new calculation with this query:
MATCH (b:BOC_beroep)-[r:MAPS_TO]->(s:Soft_skill)
WITH SUM(toFloat(r.b)) As total
MATCH (b:BOC_beroep)-[r:MAPS_TO]->(s:Soft_Skill)
RETURN b.beroepstitel AS beroep,
(toFloat(total/(r.b)))*100 AS percent
order by percent desc
我的输出是 Cannot split 'Long' by 'string' 我不明白错误
我受到这个问题和答案的启发,这是stackoverflow的内联链接。
据我了解,您可能想要这样的东西:
对于样本数据:
返回:
您的
MAPS_TO
关系显然将其b
属性存储为字符串,因此任何查询都必须始终将其转换为浮点数才能对其进行数学运算。另外,您的查询中的数学是错误的 -r.b
应该在分子中,并且total
应该在分母中。此查询可能适合您:
第一个
WITH
子句将给定beorep
、type
、 和的所有权重相加skill
。第二个WITH
子句计算所有权重的总和并收集所需的所有其他数据。查询的其余部分很简单。这是一个示例结果:
建议
如果将属性存储
b
为浮点数而不是字符串,则可以避免TOFLOAT
始终进行转换的成本。您可以通过以下方式轻松转换所有存储的重量:如果
type
只有 2 个可能的值,则需要更少的存储空间来将该属性存储为布尔值(名为isRequired
)。这还可以简化使用该属性的查询。您可以通过以下方式轻松转换该属性: