У меня есть следующая таблица:
CREATE TABLE IF NOT EXISTS foo_raw
(
time TIMESTAMPTZ NOT NULL,
volume INTEGER, <-- note source field is of type integer
price DOUBLE PRECISION
);
Я заполняю его из файла CSV:
COPY foo_raw(time,volume,price) FROM 'raw_data.csv' DELIMITER ',' CSV
Затем я создаю SELECT INTO
новую таблицу, в которой объединяю дублирующиеся строки time
в общий объем и средневзвешенную по объему цену.
SELECT INTO
:
SELECT
time,
SUM(volume)::integer AS volume, <-- note typecast to integer here
SUM(volume * price) / SUM(volume) AS price
INTO
foo
FROM
foo_raw
GROUP BY
time
ORDER BY
time;
Если я опишу свою новую таблицу, я увижу, что поле volume
имеет тип numeric
, а не integer
.
pg=# \d foo
Table "public.foo"
Column | Type | Collation | Nullable | Default
--------+--------------------------+-----------+----------+---------
time | timestamp with time zone | | not null |
volume | numeric | | |
price | double precision | | |
Приведение типов:
Вы заметите выше в моем SELECT INTO
утверждении, что я пытался типизировать результат SUM(volume)
в целое число, но это тоже не работает.
Вопрос
Как заставить поле иметь тип integer
?