Proponuję date_trunc()
zamiast. Obcina date
/ timestamp
do danej jednostki.
Z dwóch powodów:
-
Chcesz liczbę zamówień w sierpniu danego roku, np. 2012, nie suma za sierpień wszystkich lat w tabeli.
date_trunc('month', orderdate)
robi dokładnie to i zapobiega przypadkowemu mieszaniu się przez wiele lat. Otrzymasz wiele wierszy przez wiele lat. -
Możesz zarówno
ORDER BY
iGROUP BY
to jedno wyrażenie, zapytanie jest nieco szybsze.
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 tutaj
Stary sqlfiddle
W przypadku pełnych nazw miesięcy, jak sugeruje pierwszy przykład:
to_char(date_col, 'Month')
W przypadku zlokalizowanych nazw innych niż angielskie:
to_char(date_col, 'TMMonth')