一些函数的使用
有些函数并不是说只有pg才有,只是比较菜,边用边学
coalesce()
函数
-
表达式
COALESCE(expression_1, expression_2, ...,expression_n)
-
将依次参考各参数表达式,遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。所以看可以使用改函数将null化为你默认的比如false.下面是一个例子
select name, COALESCE(age, 15) from table
cast()
函数
-
表达式
CAST (expression AS data_type)
-
expression:任何有效的SQServer表达式;AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型;data_type:目标系统所提供的数据类型。
CAST (NULL AS int8) AS age
为表中的某一列加上序列
-
新建序列
-
将序列插入表中
alter table tablename alter column id set default nextval('seqname') ```
-
其实pg数据中有一个数据类型交serial,这个就是自增的,建表的时候可以设置成这个
使用数据库遇到的问题
删除数据库的重复数据
今天再写服务的时候,查看数据库,发现数据都是double的,需要进行重复数据的删除
第一种是部分数据重复的,比如,我的每条记录的id不同
-
首先出有哪些数据是重复的结果记为①
SELECT name From table GROUP BY name HAVING COUNT(name)>1 # 设置为=,就可以查询没有重复的数据
-
查询重读数据里id最小的结果记为②
SELECT MIN(id) from table GROUP BY name HAVING COUNT(name)>1
-
删除name在①里,但是id不再②里的
DELETE FROM table WHERE id IN( SELECT id FROM table WHERE name IN ( SELECT name From table GROUP BY name HAVING COUNT(name)>1) AND id NOT IN ( SELECT MIN(id) from table GROUP BY name HAVING COUNT(name)>1))
第二种是数据完全重复的,直接将数据筛选后,构建新表
-
从原表进行数据筛选,创建临时表
CREATE TABLE tabletest AS (SELECT DISTINCT * FROM table)
-
从临时表导回数据,只是一个命令
INSERT INTO 表名 (SELECT * FROM 临时表)