Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL WHERE子句中的聚合函数_Sql - Fatal编程技术网

SQL WHERE子句中的聚合函数

SQL WHERE子句中的聚合函数,sql,Sql,在大学的一次测试中,有一个问题;是否可以在SQLWHERE子句中使用聚合函数 我一直认为这是不可能的,我也找不到任何可能的例子。但是我的答案被标记为false,现在我想知道在什么情况下可以在WHERE中使用聚合函数。此外,如果不可能的话,最好能找到描述规范的链接。更新的查询: select id from t where id < (select max(id) from t); 它将从表t中选择除最后一行以外的所有行。您没有提到DBMS。假设您使用的是MS SQL Server,我发现

在大学的一次测试中,有一个问题;是否可以在SQLWHERE子句中使用聚合函数

我一直认为这是不可能的,我也找不到任何可能的例子。但是我的答案被标记为false,现在我想知道在什么情况下可以在WHERE中使用聚合函数。此外,如果不可能的话,最好能找到描述规范的链接。

更新的查询:

select id from t where id < (select max(id) from t);

它将从表t中选择除最后一行以外的所有行。

您没有提到DBMS。假设您使用的是MS SQL Server,我发现了一条不言自明的T-SQL错误消息:

聚合可能不会出现在列表中 WHERE子句,除非它位于 HAVING子句中包含的子查询 或选择列表,并且该列 聚合是一个外部引用

以及一个在子查询中实现的示例

select EmployeeId, sum(amount)
from Sales
group by Employee
having sum(amount) > 20000
对于有5个或5个以上订单的客户,显示所有客户和最小订单;对于其他客户,显示空值:

SELECT a.lastname
     , a.firstname
     , ( SELECT MIN( o.amount )
         FROM orders o
         WHERE a.customerid = o.customerid
           AND COUNT( a.customerid ) >= 5
        )
        AS smallestOrderAmount
FROM account a
GROUP BY a.customerid
       , a.lastname
       , a.firstname ;
SELECT o.customerid
     , ( SELECT COUNT( o.customerid )
         FROM account a
         WHERE a.customerid = o.customerid
           AND COUNT( o.customerid ) >= 5
        )
        AS cnt
FROM orders o
GROUP BY o.customerid ;
更新

上面的代码在SQLServer和MySQL中都运行,但它没有返回我期望的结果。下一个更接近。我猜这与字段customerid有关,按分组并在查询子查询联接中使用,在第一种情况下是外部表的主键,在第二种情况下不是

对于有5个或更多订单的客户,显示所有客户ID和订单数量;对于其他客户,显示空值:

SELECT a.lastname
     , a.firstname
     , ( SELECT MIN( o.amount )
         FROM orders o
         WHERE a.customerid = o.customerid
           AND COUNT( a.customerid ) >= 5
        )
        AS smallestOrderAmount
FROM account a
GROUP BY a.customerid
       , a.lastname
       , a.firstname ;
SELECT o.customerid
     , ( SELECT COUNT( o.customerid )
         FROM account a
         WHERE a.customerid = o.customerid
           AND COUNT( o.customerid ) >= 5
        )
        AS cnt
FROM orders o
GROUP BY o.customerid ;

拥有类似于使用聚合函数的WHERE,也可以使用子查询

select EmployeeId, sum(amount)
from Sales
group by Employee
having sum(amount) > 20000


不能在WHERE子句中直接使用聚合;这就是拥有条款的目的

您可以使用在WHERE子句中包含聚合的子查询

SELECT COUNT( * )   
FROM agents   
HAVING COUNT(*)>3;  
请参阅下面的链接:

如果有任何疑问,请致电我:85110 51548

另一个解决方案是将聚合函数移动到标量用户定义函数

创建您的函数:

在Where子句中使用函数

参考资料:


希望对某人有所帮助。

我相信这将取决于Tim提到的DBMS。在标准SQL中,您必须将其编写为selectid FROM t,其中id