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