Saltar al contenido

PostgreSQL – string_agg con número limitado de elementos

Nuestro team especializado pasados ciertos días de investigación y recopilación de de información, dieron con la solución, deseamos que todo este artículo sea de utilidad para tu trabajo.

Solución:

Hay dos formas más.

1) hacer un array de filas, limitarlo y luego concatenar en string:

SELECT array_to_string((array_agg(DISTINCT tag))[1:3], ', ') FROM tbl

(“array[1:3]” significa: tomar elementos del 1 al 3 de array)

2) concatenar filas en string sin límite, luego use “substring” para recortarlo:

string_agg(distinct(tag),',')

Si sabe que su campo “etiqueta” no puede contener , carácter, entonces puede seleccionar todo el texto antes de la enésima aparición de su ,

SELECT substring(
string_agg(DISTINCT tag, ',')
from '(?:[^,]+,)1,3')
FROM tbl

Esta subcadena seleccionará 3 o menos cadenas divididas por ,

A limit the number of elements in the following string_agg()usar LIMIT en una subconsulta:

SELECT string_agg(tag, ', ') AS tags
FROM  (
   SELECT DISTINCT tag
   FROM   tbl
   -- ORDER  BY tag -- optionally order to get deterministic result
   LIMIT   123     -- add your limit here
   ) sub;

Tenga en cuenta que la subconsulta no es un problema para el rendimiento en absoluto. De lo contrarioesto es típicamente más rápidoincluso si no impone un número máximo con LIMITporque el grupo DISTINCT en la función agregada es más costoso que hacerlo en una subconsulta para todas las filas a la vez.

O, para obtener el “100 etiquetas más comunes“:

SELECT string_agg(tag, ', ') AS tags
FROM  (
   SELECT tag
   FROM   tbl
   GROUP  BY tag
   ORDER  BY count(*) DESC
   LIMIT  100
   ) sub;

No soy consciente de que se puede limitar en el string_agg() función. Puedes limitarlo de otras maneras:

select postid, string_agg(distinct(tag), ', ')
from table t
group by postid

Entonces puedes hacer:

select postid, string_agg(distinct (case when seqnum <= 10 then tag end), ', ')
from (select t.*, dense_rank() over (partition by postid order by tag) as seqnum
      from table t
     ) t
group by postid

valoraciones y reseñas

Más adelante puedes encontrar las reseñas de otros desarrolladores, tú de igual manera puedes insertar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *