sql >> Base de Datos >  >> RDS >> PostgreSQL

Ordenando meses mientras los convierto a texto

Sugiero date_trunc() en cambio. Trunca date / timestamp a la unidad dada.

Por dos razones:

  1. Desea el número de pedidos en agosto de un año en particular, como 2012, no la suma de agosto de todos los años en la tabla. date_trunc('month', orderdate) hace exactamente eso y evita que mezcle varios años por accidente. Obtiene varias filas para varios años.

  2. Ambos pueden ORDER BY y GROUP BY esta expresión, la consulta es un poco más rápida.

SELECT to_char(date_trunc('month', orderdate), 'Mon') AS "Month" -- repeat expr.
      ,count(*) AS "Quantity"
FROM   orders
GROUP  BY date_trunc('month', orderdate)   -- 1 item covers it
ORDER  BY date_trunc('month', orderdate);

db<>fiddle aquí
Antiguo sqlfiddle

Para nombres de meses completos, como implica su primer ejemplo:

to_char(date_col, 'Month')

Para nombres localizados que no están en inglés:

to_char(date_col, 'TMMonth')

Detalles en el manual.