为啥我们不能使用减号关键字而不是减号
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 就不行呢?