跳至主要內容
3.5 窗口函数

窗口函数对一组与当前行以某种方式相关的表行执行计算。

这与可以使用 aggregate 函数完成的计算类型相当。

但是,窗口函数不会像非窗口聚合调用那样导致行分组为单个输出行。

相反,这些行保留其单独的身份。在后台,window 函数能够访问的不仅仅是查询结果的当前行。

以下示例显示了如何将每个员工的薪水与其部门的平均薪水进行比较:

SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary;

LiuSongLing大约 3 分钟pgsqlpgsql
3.6 继承

继承是来自面向对象的数据库的一个概念。

现在有两个表:一个表 cities 和一个表 capitals。

当然,首都也是城市,因此在列出所有城市时,您需要某种方式来隐式显示首都。

聪明如你可能会想到:

CREATE TABLE capitals (
  name       text,
  population real,
  elevation  int,    -- (in ft)
  state      char(2)
);

CREATE TABLE non_capitals (
  name       text,
  population real,
  elevation  int     -- (in ft)
);

CREATE VIEW cities AS
  SELECT name, population, elevation FROM capitals
    UNION
  SELECT name, population, elevation FROM non_capitals;

LiuSongLing大约 2 分钟pgsqlpgsql
2.3 创建表

您可以通过指定表名以及所有列名及其类型来创建新表:

CREATE TABLE weather (
    city            varchar(80),
    temp_lo         int,           -- low temperature
    temp_hi         int,           -- high temperature
    prcp            real,          -- precipitation
    date            date
);

LiuSongLing大约 1 分钟pgsqlpgsql
2.4 填充表的每行数据

INSERT 语句用于填充表的行数据:

INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');

LiuSongLing大约 1 分钟pgsqlpgsql
2.5 查询表

SELECT 语句用于查询检索表数据:

SELECT * FROM weather WHERE city = 'San Francisco';

LiuSongLing大约 1 分钟pgsqlpgsql
2.6 连接表

SELECT 语句查询可以一次查询多个表,也可以以同时处理表的多个行的方式访问同一个表。

一次访问多个表(或同一表的多个实例)的查询称为联接查询。它们将一个表中的行与第二个表中的行组合在一起,并使用一个表达式指定要配对的行。

例如,若要返回所有天气记录以及关联城市的位置,数据库需要将 weather 表的每一行的 city 列与 cities 表中所有行的 name 列进行比较,并选择这些值匹配的行对。

这将通过以下查询来实现:

SELECT * FROM weather JOIN cities ON city = name;

LiuSongLing大约 2 分钟pgsqlpgsql
2.7 聚合函数

PostgreSQL 支持聚合函数。

聚合函数从多个输入行计算单个结果。

例如,有一些聚合用于计算一组行的 count(计数)、sum(总和)、avg(平均值)、max(最大值)和 min(最小值)。

例如,找到最高的低温读数:

SELECT max(temp_lo) FROM weather;

LiuSongLing大约 3 分钟pgsqlpgsql
2.8 更新

UPDATE 语句用于更新表数据;

假设您发现温度读数在 11 月 28 日之后都偏离了 2 度。您可以按如下方式更正数据:

UPDATE weather
    SET temp_hi = temp_hi - 2,  temp_lo = temp_lo - 2
    WHERE date > '1994-11-28';

LiuSongLing小于 1 分钟pgsqlpgsql
2.9 删除

DELETE 语句用于删除表或表数据;

假设您不再对海沃德的天气感兴趣。然后,您可以执行以下操作从表中删除这些行:

DELETE FROM weather WHERE city = 'Hayward';

LiuSongLing大约 1 分钟pgsqlpgsql
3.2 视图

如果有语句您经常使用,而不想每次都键入,您可以使用视图。

CREATE VIEW myview AS
    SELECT name, temp_lo, temp_hi, prcp, date, location
        FROM weather, cities
        WHERE city = name;

LiuSongLing小于 1 分钟pgsqlpgsql
2