gpt4 book ai didi

mysql - 使用 count(*) 并存在

转载 作者:行者123 更新时间:2023-11-29 06:37:37 25 4
gpt4 key购买 nike

我明天有考试,模拟考试的其中一个问题是显示给定查询提供的输出。所以我使用工作副本数据库运行并遵循相同的语法。

数据如下:

SELECT vendor_id, name FROM Vendor;
+-----------+--------------+
| vendor_id | name |
+-----------+--------------+
| 1 | Tiger Direct |
| 2 | Newegg |
| 3 | Micro Center |
+-----------+--------------+

给出的查询是:

SELECT vendor_id, COUNT(*) FROM Vendor v1
WHERE EXISTS(SELECT * FROM Vendor v2 WHERE v2.vendor_id<>v1.vendor_id) GROUP BY vendor_id;
+-----------+----------+
| vendor_id | COUNT(*) |
+-----------+----------+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
+-----------+----------+

但是当我只检查 exists 表中的实际内容时,我得到:

SELECT v1.vendor_id FROM Vendor v1, Vendor v2 WHERE v1.vendor_id <> v2.vendor_id;
+-----------+
| vendor_id |
+-----------+
| 2 |
| 3 |
| 1 |
| 3 |
| 1 |
| 2 |
+-----------+

所以我的问题是:
为什么计数不是 2 而不是 1?

如果这是一个愚蠢的问题,我深表歉意,但我正在学习 SQL,这个问题让我很困惑。

编辑:

我收到的答案很好,但现在我不得不问:

Attends:   
SSN NUMBER
123456789 670
123456789 680
891234567 680
234567891 670

这个查询的结果是什么:

select SSN, count(*), avg(Number) from Attends S1
where exists
(select * from Attends S2 where S1.SSN <> S2.SSN) group by SSN

我现在明白 count(*) 永远是 1,因为只有 4 个不同的元组,但这与 AVG(Number) 有什么关系。是否有任何东西实际上是平均的,或者它只是返回原始数字。

最佳答案

您的连接返回不匹配的每一行并将它们连接在一起,乘以您的结果数量,其中 exists 不这样做,它应用减少而不改变内存中的结果。

SELECT v1.vendor_id, v2.vendor_id v2id FROM Vendor v1, Vendor v2 WHERE v1.vendor_id <> v2.vendor_id;

+-----------+-----------+
| vendor_id | v2id |
+-----------+-----------+
| 2 | 1 |
| 3 | 1 |
| 1 | 2 |
| 3 | 2 |
| 1 | 3 |
| 2 | 3 |
+-----------+-----------+

关于mysql - 使用 count(*) 并存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23500104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com