📜  如何在 psql 中使用 except 计数(1)

📅  最后修改于: 2023-12-03 15:38:23.057000             🧑  作者: Mango

如何在 psql 中使用 except 计数

在 PostgreSQL 中,except 关键字用于从第一个查询结果中删除第二个查询结果中也有的行。在某些情况下,我们需要计算这个差异的行数。下面介绍如何在 psql 中使用 except 计数。

示例数据

假设我们有两张表,分别是 t1t2,它们的结构如下:

CREATE TABLE t1 (id INT, name VARCHAR);
CREATE TABLE t2 (id INT, name VARCHAR);
INSERT INTO t1 VALUES (1, 'a'), (2, 'b'), (3, 'c');
INSERT INTO t2 VALUES (2, 'b'), (3, 'c'), (4, 'd');

t1 中有 3 条记录,t2 中有 3 条记录。

使用 except 运算符

我们可以使用 except 运算符来找出在 t1 中但不在 t2 中的记录。语法如下:

SELECT * FROM t1 EXCEPT SELECT * FROM t2;

这条语句会返回以下结果:

 id | name
----+------
  1 | a
(1 row)

表示 t1 中有 1 条记录不在 t2 中。

使用 count(*) 函数计数

为了计算差异的行数,我们可以为上述查询添加 count(*) 函数。语法如下:

SELECT count(*) FROM (SELECT * FROM t1 EXCEPT SELECT * FROM t2) AS t;

这条语句会返回以下结果:

 count
-------
     1
(1 row)

表示 t1t2 之间的差异有 1 行。

总结

在 psql 中使用 except 计数可以通过添加 count(*) 函数来实现。使用这个技巧可以更好地理解两个查询之间的差异。