最近使用PostgreSQL做了不少数据处理的工作,现将用到的SQL语句整理一下。
CREATE DATABASE table_name;
CREATE table_name IF NOT EXISTS {} (time timestamp, data int)
drop table if exists table_name
insert into table_name values(%s, %s);
SELECT time, data FROM table_name
SELECT * FROM table1 UNION ALL SELECT * FROM table2
UNION是上下关联,将多个表的数据进行合并,分为去重合并UNION和不去重合并UNION ALL
SELECT time, data FROM table1 JOIN table2 ON table1.id=table2.id WHERE table1.code in (‘999’)
join 是左右关联,相关的还有left right full 等, on是join的规则
where是条件语句
alter TABLE table_name alter COLUMN col_name type int using col_name::int
将表格table_name中的col_name列的类型转换为int
update table_name set col_name=coalesce(col_name, 0)
将表格table_name 中的col_name列中的NULL填充为0
SELECT date_trunc(‘hour’, time) + INTERVAL ‘2 minutes’ * (floor(extract(‘minute’ from time) / 2)) AS time_slot,sum(data) FROM table_name GROUP BY time_slot ORDER BY time_slot;
将表格table_name根据时间time列按照每2分钟间隔进行分组求和并按照时间排序
to_char(time, ‘YYYY-MM-DD HH24:MI:00’)::TIMESTAMP
后面的::TIMESTAMP可有可无,根据多种时间数据的统一格式来
在多表融合中,通常需要考虑数据缺失的情况,因此我们应当手动设置标准的时间列,这样缺失的数据行也会显示,不会因为数据缺失而不显示。
SELECT ‘2023-06-09 08:00:00’::timestamp AS time
SELECT generate_series(‘2023-01-01 08:00’::timestamp, ‘2023-01-01 21:00’::timestamp, ‘10 minutes’::interval) AS timestamp;
选择8点到9点15的所有数据
where date_trunc(‘minute’,time)>=date_trunc(‘minute’,time::date+interval ‘8 hours 00 minutes’) and date_trunc(‘minute’,time)<=date_trunc(‘minute’,time::date+interval ‘9 hours 15 minutes’))
对相同日期数据计数,并选择计数后为78的所有日期时间下的数据
select time::date, count() as count from table_name group by time::date having count()=78 order by time::date
新建临时表
create temp table table_name as SELECT …(某表操作)
删除临时表
drop table table_name