Re: Ordenar por columna con funcion to_char()

From: Jaime Casanova <jcasanov(at)systemguards(dot)com(dot)ec>
To: Luis Fernando Ortiz Vera <lfernandortiz(at)gmail(dot)com>
Cc: POSTGRES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Ordenar por columna con funcion to_char()
Date: 2020-12-01 19:52:01
Message-ID: CAJKUy5i+qKvONqdTPaX0wr6q9Xuc3PSaAbq6FqtjgWRmjipkJA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Tue, Dec 1, 2020 at 11:50 AM Luis Fernando Ortiz Vera
<lfernandortiz(at)gmail(dot)com> wrote:
>
>
> Cordial saludo, aprciada comunidad, tengo la sigiuiente columna, que consolida cifras por Meses, este nombre de mes es en español
>
> SELECT
> to_char(to_timestamp (CAST(date_part('month', public.detallelabor.fechalabor) AS text), 'MM'), 'TMMonth') as mes,
> SUM( case when tipolabor.id_material = 1 then detallelabor.cantidad else 0 end ) as carbon
> FROM
> detallelabor
> INNER JOIN asignacionminero ON (detallelabor.id_asignacionminero = asignacionminero.id_asignacion_labon)
> INNER JOIN labor ON (asignacionminero.id_labor = labor.id_labor)
> INNER JOIN tipolabor ON (labor.id_tipo_labor = tipolabor.id_tipo_labor)
> WHERE
> EXTRACT( MONTH FROM date( public.detallelabor.fechalabor ) ) BETWEEN 4 and 10
> GROUP BY 1
> ORDER BY mes ASC
>
> Y me retorna el siguientes resultado
> mes carbon
> Agosto 93
> Julio 85
> Junio 50
> Mayo 76
> Octubre 237
> Septiembre 181
>

a mi me parece correcto ese resultado, porque le estas pidiendo
ordenar cadenas de texto así que lo hace en orden alfabetico

> Problema: No me esta ordenando por mes de forma ascendente.
>

y por qué lo haría? estás ordenando el resultado de to_char() que es
texto, no fecha así que lo ordena como texto. si lo quieres ordenar
por mes usa "ORDER BY public.detallelabor.fechalabor" aunque quizá
debas agregarlo al GROUP BY? espero que no pero si tienes que
agregarlo al GROUP BY podría servirte "ORDER BY date_part('month',
public.detallelabor.fechalabor)"

PS: tu consulta se ve muy rara:
- para que conviertes el resultado del date_part() a texto lo
devuelves a timestamp y luego de nuevo a texto con to_char()?
- por qué usas date_part() en una parte de la consulta y extract() en
otra, aunque en realidad son la misma función por lo que no hay mayor
problema usar un mismo estilo, formato o estándar hace la consulta más
legible

--
Jaime Casanova
Professional PostgreSQL: Soporte 24x7 y capacitación

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Horacio Miranda 2020-12-24 00:55:42 Re: Consulta sobre Json o jsonb
Previous Message Enrique Herrera Noya 2020-12-01 18:50:53 Re: Ordenar por columna con funcion to_char()