Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

421
Vistas
¿Cómo sumar ocurrencias de niños de una tabla de unión en Postgres?

Necesito contar cuántos consultants están usando una skill a través de una tabla de combinación ( consultant_skills ), y el desafío es sumar recursivamente las ocurrencias de los niños a los padres.

Aquí está la reproducción de lo que estoy tratando de lograr. Los resultados actuales son:

 skill_id | count 2 | 2 3 | 1 5 | 1 6 | 1

Pero necesito calcular el conteo de los padres recursivamente, donde el resultado esperado sería:

 skill_id | count 1 | 2 2 | 2 3 | 1 4 | 2 5 | 2 6 | 1

¿Alguien sabe cómo puedo hacer eso?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Solución Sqlfiddle

Debe usar WITH RECURSIVE , como sugiere Mike. Su respuesta es útil, especialmente en referencia al uso de distinct para eliminar recuentos redundantes para consultores, pero no conduce a los resultados exactos que está buscando.

Vea la solución de trabajo en el sqlfiddle anterior. Creo que esto es lo que estás buscando:

 WITH RECURSIVE results(skill_id, parent_id, consultant_id) AS ( SELECT skills.id as skill_id, parent_id, consultant_id FROM consultant_skills JOIN skills on skill_id = skills.id UNION ALL SELECT skills.id as skill_id, skills.parent_id as parent_id, consultant_id FROM results JOIN skills on results.parent_id = skills.id ) SELECT skill_id, count(distinct consultant_id) from results GROUP BY skill_id ORDER BY skill_id

Lo que sucede en la consulta debajo de UNION ALL es que estamos uniendo recursivamente la tabla de habilidades a sí misma, pero rotando la identificación principal anterior como la nueva identificación de habilidad y usando la nueva identificación principal en cada iteración. La recursividad se detiene porque eventualmente la identificación principal es NULL y no hay JOIN porque es una unión INTERNA. Espero que tenga sentido.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda