具有GROUP BY的SQL EXISTS运算符

具有GROUP BY的SQL EXISTS运算符,sql,Sql,我目前正在浏览上的EXISTS操作符示例,遇到了一个不太有意义的示例。代码如下: SELECT cust_code,cust_name,cust_city,grade FROM customer WHERE grade=2 AND EXISTS( SELECT COUNT(*) FROM customer WHERE grade=2 GROUP BY grade HAVING CO

我目前正在浏览上的EXISTS操作符示例,遇到了一个不太有意义的示例。代码如下:

SELECT cust_code,cust_name,cust_city,grade  
FROM customer  
WHERE grade=2 AND  
    EXISTS(  
        SELECT COUNT(*)
        FROM customer  
        WHERE grade=2  
        GROUP BY grade  
        HAVING COUNT(*)>2
    );
根据我的理解,子查询的计算结果总是TRUE,它与更高的customer表无关,因此将其放在那里似乎无关紧要

有人能解释一下代码在这里要实现什么吗


非常感谢

此代码验证
customer
表中
grade=2
至少有两条记录,如果没有,记录将被过滤。

存在
grade=2
的记录计数小于或等于2时,将计算为
false
。查询检查是否有两条以上的记录
grade=2
。如果在外部
选择中提到了show列,则第二个子查询首先获取customer表中等级等于2的所有行

SELECT COUNT(*)
FROM customer  
WHERE grade=2 
下面是查询的下一部分。按年级将所有这些行分组

GROUP BY grade 
最后,下面的having count代码排除了其中至少没有2项的任何组

HAVING COUNT(*)>2
因此,您可能会遇到这样一种情况,即许多人都有分数,这将输入到customer表中。如果两个或两个以上的人没有相同的分数,此查询将找不到结果

等级=2且
存在(
选择COUNT() 来自客户
其中等级=2
按年级分组
使COUNT()大于2 );

因此,您的查询将检查Grade=2,并且至少有一行具有以下条件

WHERE grade=2  
        GROUP BY grade  
        HAVING COUNT(*)>2

如果这两个条件都不满足,您的查询将不会返回任何结果集

如果您有子查询,它将不会返回任何结果,请在w3resource网站中解释。
。。。与上面的customer表不相关
您是正确的。虽然它是正确的,但这个例子是可怕的,我想。试图实现吗?谁知道。。。通常,
EXISTS
正在使用相关子查询,但此处不使用。
EXISTS运算符EXISTS检查子查询结果的存在性。EXISTS子查询测试子查询是否至少获取一行。如果未返回任何数据,则此运算符返回“FALSE”。-更多信息,请访问:http://www.w3resource.com/sql/special-operators/sql_exists.php#sthash.ZYVpVsr6.dpuf
Correct,如果至少有三个这样的客户,则查询会显示等级为2的所有客户,否则不会显示任何客户。
WHERE grade=2  
        GROUP BY grade  
        HAVING COUNT(*)>2