Postgress to_date и извлекать комбинат - PullRequest
0 голосов
/ 21 января 2020

У меня есть следующая таблица в postgres:

+----------+-------+
| date     | money |
+----------+-------+
| 20191212 | 10    |
+----------+-------+
| 20200101 | 20    |
+----------+-------+
| 20200102 | 30    |
+----------+-------+

Я хотел бы создать 2 запроса, которые группируют по сумме денег по годам и один запрос по месяцам. Столбец даты - varchar, и я не могу преобразовать его в дату.

+------+-------+
| year | money |
+------+-------+
| 2019 | 10    |
+------+-------+
| 2020 | 50    |
+------+-------+
+---------+-------+
| month   | money |
+---------+-------+
| 2019-12 | 10    |
+---------+-------+
| 2020-01 | 50    |
+---------+-------+

Я попытался объединить функцию to_date и функцию extract, но она не работает:

WITH date_year AS (
    SELECT to_date(date, 'YYYYMMDD') as date_year from sales
)
SELECT EXTRACT(YEAR FROM date_year) as year, sum(money) as sum FROM sales group by year
WITH date_month AS (
    SELECT to_date(date, 'YYYYMMDD') as date_month from sales
)
SELECT EXTRACT(MONTH FROM date_month) as month, sum(money) as sum FROM sales group by month

1 Ответ

0 голосов
/ 21 января 2020

Вы можете использовать функции или псевдонимы в предложении group by:

select extract(year from to_date(date, 'YYYYMMDD')) as y_year, sum(money) as sum 
from sales 
group by y_year

select extract(year from to_date(date, 'YYYYMMDD')) || '-' || extract(month from to_date(date, 'YYYYMMDD')) as year_month, sum(money) as sum 
from sales 
group by year_month

Я использовал y_year, поскольку year зарезервировано в postgres.

Вы также можете рассмотреть используя date_trunc:

select date_trunc('month', to_date(date, 'YYYYMMDD')) as year_month, sum(money) as sum 
from sales 
group by year_month
...