AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 76921714
Accepted
Leyla Elkhamlichi
Leyla Elkhamlichi
Asked: 2023-08-17 20:51:42 +0800 CST2023-08-17 20:51:42 +0800 CST 2023-08-17 20:51:42 +0800 CST

o cálculo da porcentagem de uma coluna é a tabela neo4j/Cypher

  • 772

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 .

neo4j
  • 2 2 respostas
  • 37 Views

2 respostas

  • Voted
  1. nimrod serok
    2023-08-17T22:43:40+08:002023-08-17T22:43:40+08:00

    Pelo que entendi, você pode querer algo assim:

    MATCH (b:BOC_beroep)-[r:MAPS_TO]->(s:Soft_Skill)
    WITH SUM(1) AS total, r.type AS type, COLLECT(r.b) AS type_sum
    WITH REDUCE(total=0, number in type_sum | total + number) AS type_sum, type, total
    WITH COLLECT ({type: type, type_sum: toFloat(type_sum)}) AS data, SUM(total) AS total
    UNWIND data AS d
    WITH d.type_sum / total * 100 AS percent, d.type AS type
    RETURN percent, type
    ORDER BY percent DESC
    

    Qual para dados de exemplo:

    MERGE (a1:BOC_beroep {occupation: 'dokter', code_occupation: 'sk_565'})  
    MERGE (a2:Soft_Skill {skill_code: 'sk_687', name: 'leren'}) 
    MERGE (a1)-[:MAPS_TO{type:"optioneel", b:0.5, k:1}]-(a2)
    MERGE (a1)-[:MAPS_TO{type:"optioneel", b:0.5, k:2}]-(a2)
    MERGE (a1)-[:MAPS_TO{type:"essentieel", b:1, k:3}]-(a2)
    MERGE (a1)-[:MAPS_TO{type:"essentieel", b:1, k:4}]-(a2)
    

    Retorna:

    ╒═════════╤════════════╕
    │"percent"│"type"      │
    ╞═════════╪════════════╡
    │50.0     │"essentieel"│
    ├─────────┼────────────┤
    │25.0     │"optioneel" │
    └─────────┴────────────┘
    
    • 1
  2. Best Answer
    cybersam
    2023-08-18T00:53:35+08:002023-08-18T00:53:35+08:00

    Seus MAPS_TOrelacionamentos aparentemente armazenam sua bpropriedade 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.bdeve estar no numerador e totalno denominador.

    Esta consulta pode funcionar para você:

    MATCH (b:BOC_beroep)-[r:MAPS_TO]->(s:Soft_Skill)
    WITH b.beroepstitel AS beorep, r.type AS type, s.name AS skill, SUM(TOFLOAT(r.b)) AS weight
    WITH SUM(weight) As total, COLLECT([beorep, type, skill, weight]) AS data
    UNWIND data AS datum
    RETURN
      datum[0] AS beroep,
      datum[1] AS type,
      datum[2] AS skill,
      datum[3]/total*100 AS percent
    ORDER BY percent desc
    

    A primeira WITHcláusula soma todos os pesos para um determinado beorep, typee skill. A segunda WITHclá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:

    ╒════════╤════════════╤═══════╤═════════════════╕
    │beroep  │type        │skill  │percent          │
    ╞════════╪════════════╪═══════╪═════════════════╡
    │"dokter"│"essentieel"│"leren"│66.66666666666666│
    ├────────┼────────────┼───────┼─────────────────┤
    │"dokter"│"optioneel" │"leren"│33.33333333333333│
    └────────┴────────────┴───────┴─────────────────┘
    

    Recomendações

    1. Se você armazenou a bpropriedade como float em vez de string, pode evitar o custo de fazer TOFLOATconversões o tempo todo. Você pode converter facilmente todos os pesos armazenados desta maneira:

      MATCH ()-[r:MAPS_TO]->()
      SET r.b = TOFLOAT(r.b)
      
    2. Se typetiver 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:

      MATCH ()-[r:MAPS_TO]->()
      SET r.isRequired = CASE r.type WHEN 'essentieel' THEN true ELSE false END
      REMOVE r.type
      
    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    destaque o código em HTML usando <font color="#xxx">

    • 2 respostas
  • Marko Smith

    Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}?

    • 1 respostas
  • Marko Smith

    Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)?

    • 2 respostas
  • Marko Smith

    Por que as compreensões de lista criam uma função internamente?

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 respostas
  • Marko Smith

    Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)?

    • 4 respostas
  • Marko Smith

    Por que o construtor de uma variável global não é chamado em uma biblioteca?

    • 1 respostas
  • Marko Smith

    Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto?

    • 1 respostas
  • Marko Smith

    Somente operações bit a bit para std::byte em C++ 17?

    • 1 respostas
  • Martin Hope
    fbrereto Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi Por que as compreensões de lista criam uma função internamente? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A formato fmt %H:%M:%S sem decimais 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python std::views::filter do C++20 não filtrando a visualização corretamente 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa Por que o construtor de uma variável global não é chamado em uma biblioteca? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev Por que os compiladores perdem a vetorização aqui? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan Somente operações bit a bit para std::byte em C++ 17? 2023-08-17 17:13:58 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve