为啥我们不能使用减号关键字而不是减号

Posted

技术标签:

【中文标题】为啥我们不能使用减号关键字而不是减号【英文标题】:why cant we use minus keyword rather than the minus sign为什么我们不能使用减号关键字而不是减号 【发布时间】:2019-10-29 07:12:41 【问题描述】:
+-------------+------------+
| 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;

【问题讨论】:

您使用的是哪个 dbms? 【参考方案1】:

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

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

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

【讨论】:

非常感谢您的帮助。 很高兴为他人提供任何可能的帮助【参考方案2】:

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

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

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

所以查询SELECT COUNT(CITY) FROM STATION返回如下结果set

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(或MINUS)结合将返回

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

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


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

【讨论】:

非常感谢您的帮助。 @YusraIkram 如果这个或其他答案解决了你的问题,那么请accept它,这样你的问题就会被标记为已解决。

以上是关于为啥我们不能使用减号关键字而不是减号的主要内容,如果未能解决你的问题,请参考以下文章

为啥有的LINUX命令行有2个减号,比如 ps -aux --sort pid 而用ps -aux -sort pid 就不行呢?

为啥我在 pentaho 中过滤行年龄 > 0 时会减号?

一张思维导图教你使用google一下

搜素技巧

在python中能使用加号和减号来连接和删除字符串吗?

使用“减号”操作来查找是不是满足条件