Quero calcular a porcentagem de quanto cada tipo de habilidade está presente para cada ocupação. Eu fiz uma ocupação de nós diferentes e Soft_skills eles têm um relacionamento [r:MAPS_TO] o relacionamento tem dois tipos de propriedade ('essentieel', 'optioneel') e b (esse tipo de peso essentieel = 1,0 e optioneel = 0,5)
veja abaixo um exemplo do arquivo que estou usando
ocupação | código_ocupação | skill_code | nome | tipo | b |
---|---|---|---|---|---|
dokter | sk_565 | sk_687 | aprender | opcional | 0,5 |
dokter | sk_565 | sk_687 | aprender | opcional | 0,5 |
dokter | sk_565 | sk_687 | aprender | essencial | 1,0 |
dokter | sk_565 | sk_687 | aprender | essencial | 1,0 |
fiz uma consulta onde posso calcular qual é a soma de cada ocupação veja abaixo minha consulta:
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
esta é a minha saída
beroep | soma |
---|---|
Doker | 5 |
Kapper | 7 |
sei que quero atingir qual é a porcentagem do tipo de habilidade que meu cálculo será
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
Minha saída é Não é possível dividir 'Long' por 'string' Não entendo o erro
fui inspirado por esta pergunta e resposta Aqui está um link embutido para stackoverflow .
Pelo que entendi, você pode querer algo assim:
Qual para dados de exemplo:
Retorna:
Seus
MAPS_TO
relacionamentos aparentemente armazenam suab
propriedade como uma string, portanto, qualquer consulta deve sempre convertê-la em float para fazer matemática com ela. Além disso, a matemática em sua consulta está errada -r.b
deve estar no numerador etotal
no denominador.Esta consulta pode funcionar para você:
A primeira
WITH
cláusula soma todos os pesos para um determinadobeorep
,type
eskill
. A segundaWITH
cláusula calcula um total de todos os pesos e coleta todos os outros dados necessários. O resto da consulta é simples.Aqui está um resultado de amostra:
Recomendações
Se você armazenou a
b
propriedade como float em vez de string, pode evitar o custo de fazerTOFLOAT
conversões o tempo todo. Você pode converter facilmente todos os pesos armazenados desta maneira:Se
type
tiver apenas 2 valores possíveis, seria necessário menos espaço de armazenamento para armazenar essa propriedade como um booleano (chamado, digamos,isRequired
). Isso também pode simplificar as consultas usando essa propriedade. Você pode facilmente converter essa propriedade desta maneira: