postgresql从入门到菜鸟(三)

来源:互联网 发布:2017全国双创数据报告 编辑:程序博客网 时间:2024/06/05 19:05

上一篇我们已经在rhel上创建了数据库,并且建立的一张成绩表。之后通过通过客户端连接上服务器端。

这一篇将会写一些关于数据库的操作,首先是一些基本的操作的操作如选择数据库,查看表等等。

连接至服务器端后可以通过以下命令查看数据库的基本信息

\l:查看所有数据库。

\c:选择数据库 。    \c+dbname+username可以选择某用户进入数据库。

\dt;查看所有的表。

\d:查看表结构  \d+tablename

\q:退出psql指令。


sql方面采用标准sql即可。这里提一个和mysql对比,postgresql多出的一个函数,窗口函数。

先来看一下这个函数能干什么。

以上一篇文章中新建的成绩表为例,查询各科的平均分。

这个sql在mysql中可以以以下语句实现


select subject,avg(score) from score group by subject;

 subject |       avg        
---------+------------------
 语文    |               90
 化学    | 86.6666666666667
 物理    | 93.3333333333333
 数学    | 92.3333333333333
 英语    |               84


上面是使用聚集函数实现各科平均分查询,下面看下如何使用窗口函数来实现各科平均分的查询。

select distinct  subject,avg(score) over(PARTITION BY subject) from score;

 subject |       avg        
---------+------------------
 英语    |               84
 物理    | 93.3333333333333
 数学    | 92.3333333333333
 语文    |               90
 化学    | 86.6666666666667

可以看到,在使用窗口函数进行查询的时候添加了distinct 去重,这是因为,当使用窗口函数进行查询时,表内有多少记录,窗口函数就会打印多少条。

由此可见,窗口函数其实主要适用于进行原始数据和分类后的数据对比。

上面的这个例子可能不明显,下面再看一个对比功能的sql,查询所有人的分数,并和该科的平均分进行对比。

在聚集函数中查询列必须存在于group by中,所以要实现该功能较为困难。而窗口函数则可以轻而易举的实现。

select *,avg(score) over (PARTITION BY subject) from score order by id; 

id | name | subject | score |       avg        
----+------+---------+-------+------------------
  1 | wang | 数学    |    99 | 92.3333333333333
  2 | wang | 语文    |    80 |               90
  3 | wang | 物理    |    99 | 93.3333333333333
  4 | wang | 化学    |    98 | 86.6666666666667
  5 | wang | 英语    |    79 |               84
  6 | liu  | 数学    |    89 | 92.3333333333333
  7 | liu  | 语文    |    99 |               90
  8 | liu  | 物理    |    89 | 93.3333333333333
  9 | liu  | 化学    |    69 | 86.6666666666667
 10 | liu  | 英语    |    79 |               84
 11 | zan  | 数学    |    89 | 92.3333333333333
 12 | zan  | 语文    |    91 |               90
 13 | zan  | 物理    |    92 | 93.3333333333333
 14 | zan  | 化学    |    93 | 86.6666666666667
 15 | zan  | 英语    |    94 |               84

以上就是一些对于窗口函数的理解,有不对的地方还请指正。


原创粉丝点击