Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

340
Visualizações
PostgreSQL: encontrar la subcadena () más común en una matriz

Necesito encontrar una manera de determinar la subcadena más común dentro de una matriz en PostgreSQL.

Tengo una matriz de una sola dimensión en una columna en PostgreSQL que almacena valores de CPV (un vocabulario de clasificación anidado: https://simap.ted.europa.eu/cpv ). Los códigos compuestos por caracteres numéricos, pero almacenados como varchar ya que algunos registros tienen un cero inicial, como este:

["45331110", "50721000", "45251250", "42160000", "39715000", "45315000", "09323000", "71321200", "45331100", "50720000"]

Quiero extraer los dos dígitos iniciales más comunes de esta matriz usando PostgreSQL, que en el caso del ejemplo sería 45 .

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Si desea obtener los dos dígitos iniciales más comunes por fila, puede usar:

 WITH data_rows(id, cpv_values) AS ( VALUES (1, ARRAY ['45331110', '50721000', '45251250','42160000','39715000','45315000', '09323000','71321200','45331100', '50720000']) , (2, ARRAY ['50721000']) -- second test case ) SELECT id, leading_two_digits FROM data_rows -- for every row in `data_rows` (your table), -- select the most common `leading_two_digits` (through GROUP BY/ORDER BY/LIMIT 1) JOIN LATERAL ( SELECT left(code, 2) AS leading_two_digits FROM unnest(cpv_values) AS f(code) GROUP BY left(code, 2) ORDER BY COUNT(*) DESC LIMIT 1 ) s ON true

devoluciones

 +--+------------------+ |id|leading_two_digits| +--+------------------+ |1 |45 | |2 |50 | +--+------------------+

Si desea obtener los dos dígitos principales más comunes en todas las filas, puede usar:

 WITH data_rows(cpv_values) AS ( VALUES (ARRAY ['45331110', '50721000', '45251250','42160000','39715000','45315000', '09323000','71321200','45331100', '50720000']), (ARRAY ['45']) ) SELECT left(code, 2) AS leading_two_digits FROM data_rows, unnest(cpv_values) AS f(code) GROUP BY left(code, 2) ORDER BY COUNT(*) DESC LIMIT 1
over 4 years ago · Santiago Trujillo Relatório

0

Esta consulta hace lo que necesita.

 select substr(t, 1, 2) mc from unnest(array['45331110', '50721000', '45251250', '42160000', '39715000', '45315000', '09323000', '71321200', '45331100', '50720000']) t group by mc order by count(1) desc limit 1;

Resultado:

 Name|Value| ----|-----| mc |45 |

Puede usar lo anterior como una subconsulta para extraer la subcadena más común por fila.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda