在大学的考试中有一个问题; 是否可以在SQL WHERE子句中使用聚合函数.
我一直认为这是不可能的,我也找不到任何可能的例子.但我的答案被标记为假,现在我想知道在哪些情况下可以使用聚合函数WHERE.此外,如果不可能,那么获得指向描述的规范的链接会很好.
Jas*_*aat 100
HAVING就像使用聚合函数的WHERE,或者您可以使用子查询.
select EmployeeId, sum(amount)
from Sales
group by Employee
having sum(amount) > 20000
Run Code Online (Sandbox Code Playgroud)
要么
select EmployeeId, sum(amount)
from Sales
group by Employee
where EmployeeId in (
select max(EmployeeId) from Employees)
Run Code Online (Sandbox Code Playgroud)
Tim*_*ter 29
您还没有提到DBMS.假设您正在使用MS SQL-Server,我发现了一个不言自明的T-SQL错误消息:
"聚合可能不会出现在WHERE子句中,除非它位于HAVING子句或选择列表中包含的子查询中,并且要聚合的列是外部引用"
http://www.sql-server-performance.com/
并且可以在子查询中进行示例.
显示拥有5个或更多订单(以及其他订单为NULL)的所有客户和最小订单:
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 ;
Run Code Online (Sandbox Code Playgroud)
UPDATE.
以上都在SQL-Server和MySQL中运行,但它不会返回我预期的结果.下一个更接近.我猜这与字段有关customerid,GROUPed BY和查询子查询连接中使用的是外表的第一种情况PRIMARY KEY,而第二种情况则不是.
显示具有5个或更多订单的订户的所有客户ID和订单数量(对其他订单为NULL):
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 ;
Run Code Online (Sandbox Code Playgroud)
更新的查询:
select id from t where id < (select max(id) from t);
Run Code Online (Sandbox Code Playgroud)
它将从表t中选择除最后一行之外的所有行.
SELECT COUNT( * )
FROM agents
HAVING COUNT(*)>3;
Run Code Online (Sandbox Code Playgroud)
请参阅下面的更多链接:
http://www.w3resource.com/sql/aggregate-functions/count-having.php#sthash.90csRM4I.dpuf][1] 如果有任何查询,请致电我:85110 51548
http://www.w3resource.com/sql/aggregate-functions/count-having.php
| 归档时间: |
|
| 查看次数: |
213311 次 |
| 最近记录: |