-2
+-------------+------------+
| Field       |   Type     |
+-------------+------------+
| ID          | INTEGER    |
| CITY        | VARCHAR(21)|
| STATE       | VARCHAR(2) |
| LAT_N       | NUMERIC    |
| LONG_W      | NUMERIC    |
+-------------+------------

求表中 CITY 条目总数与表中不同 CITY 条目数之间的差值。

如果我使用减号关键字,那么它不起作用但是当我使用实际的减号时,它就像

SELECT (COUNT(CITY)- COUNT(DISTINCT CITY))
FROM STATION;

这是为什么?

SELECT COUNT(CITY) FROM STATION
MINUS 
SELECT COUNT(DISTINCT CITY) FROM STATION;
4

2 回答 2

1

以下是使用 MINUS 关键字的目的

“SQL MINUS 运算符用于返回第一个 SELECT 语句中第二个 SELECT 语句未返回的所有行(实际行不是数字)。每个 SELECT 语句将定义一个数据集。MINUS 运算符将从第一个 SELECT 语句中检索所有记录数据集,然后从结果中删除第二个数据集中的所有记录。”

如果您想像在代码中那样减去数字(计算城市并从其他不同城市减去),这意味着它将从数字中减去一个数字(4 - 3)但是如果您尝试减去上述实际行,那么你必须使用 MINUS 关键字。

于 2019-10-29T07:28:16.593 回答
1

minus是一个类似的运算符union- 它将多组行组合成一组新的行。它是Oracle 的非标准版本的EXCEPT算子。

EXCEPT(或MINUS)返回第一个集合中不包含在第二个集合中的所有行。

假设表格包含 10 行和 5 个不同的城市,那么

因此查询SELECT COUNT(CITY) FROM STATION返回以下结果

count
-----
   10

SELECT COUNT(DISTINCT CITY) FROM STATION返回

count
-----
    5

由于MINUS返回第一个集合中不包含在第二个集合中的行,因此MINUS运算符的结果只是第一行。

这也适用于多行和多列。假设您有两个查询。

第一个返回这个

id | city  
---+-------
 1 | Berlin
 2 | Vienna
 3 | Paris 

第二个返回

id | city  
---+-------
 1 | Berlin

将两者与EXCEPT(or MINUS) 结合将返回

id | city  
---+-------
 2 | Vienna
 3 | Paris 

因为这些是第一组中的行,第二组中 存在。


-从另一个数字值中减去一个数字值,因此它仅适用于 SELECT 列表中的列,而不适用于完整的行集。

于 2019-10-29T07:22:50.270 回答