在大学的一次测试中,有一个问题;是否可以在SQL WHERE
子句中使用聚合函数.
我一直认为这是不可能的,我也找不到任何可能的例子.但我的答案被标记为false,现在我想知道在哪些情况下可以在WHERE
中使用聚合函数.此外,如果不可能的话,最好能找到描述它的规范的链接.
在大学的一次测试中,有一个问题;是否可以在SQL WHERE
子句中使用聚合函数.
我一直认为这是不可能的,我也找不到任何可能的例子.但我的答案被标记为false,现在我想知道在哪些情况下可以在WHERE
中使用聚合函数.此外,如果不可能的话,最好能找到描述它的规范的链接.
你没有提到数据库管理系统.假设您使用的是MS SQL Server,我发现一条T-SQL错误消息不言自明:
"聚合可能不会出现在
http://www.sql-server-performance.com/
以及一个在子查询中可能实现的示例.
显示所有客户和最小订单,对于那些有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 ;
使现代化
上面的代码在SQL Server和MySQL中都运行,但它没有返回我预期的结果.下一个更接近.我猜这与字段customerid
有关,按分组并在查询子查询联接中使用的字段customerid
在第一种情况下是外部表的主键,而在第二种情况下不是.
显示拥有5个或更多订单的客户的所有客户ID和订单数量(其他客户为空):
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 ;