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
以上就是一些对于窗口函数的理解,有不对的地方还请指正。
- postgresql从入门到菜鸟(三)
- postgresql从入门到菜鸟(一)
- postgresql从入门到菜鸟(二)
- 从菜鸟到入门(三)- 文档撰写
- PostgreSQL从菜鸟到专家 PostgreSQL介绍
- Quartz入门例子简介 从入门到菜鸟(三)
- Git从菜鸟到入门到放弃
- PostgreSQL数据库从入门到精通
- PostgreSQL数据库从入门到精通
- 【零基础】PostgreSQL从入门到精通
- 从菜鸟到入门(二)- 协同开发
- 从菜鸟到高手的linux教程(三)
- PostgreSQL从菜鸟到专家 什么是数据库管理系统
- mybatis 从入门到精通(三)
- ActiveMQ从入门到精通(三)
- DOCKER 从入门到放弃(三)
- ActiveMQ从入门到精通(三)
- JavaScript从入门到放弃(三)
- MyBatis 详解(一对一,一对多,多对多)
- 强连通算法--Tarjan
- hdu 6038 Function【置换群进阶】
- Linux pthread_cond_t 封装
- 如何把安全证书导入到java中的cacerts证书库
- postgresql从入门到菜鸟(三)
- androd自定义view实现圆显示进度和百分比的控件
- c#数据类型转换方法
- pyhton学习笔记之安装cx_Oracle模块那些事儿及操作oracle小实例
- iOS工程需要了解的排序算法
- 互联网时代,如何能保障用户的“数据隐私”?
- 斐波那契数列
- mongodb学习笔记(五)——索引
- 架构师日记——Nginx的Rewrite模块配置