SQL WHERE-Clause의 집계 함수
대학 시험에서 질문이있었습니다. SQL WHERE
절 에서 집계 함수를 사용할 수 있습니까?
나는 항상 이것이 가능하지 않다고 생각했고 어떻게 가능한지 어떤 예도 찾을 수 없습니다. 하지만 내 대답은 거짓으로 표시되었으며 이제 어떤 경우에 .NET Framework에서 집계 함수를 사용할 수 있는지 알고 싶습니다 WHERE
. 또한 가능하지 않은 경우 설명 된 사양에 대한 링크를 얻는 것이 좋습니다.
DBMS에 대해 언급하지 않았습니다. MS SQL-Server를 사용한다고 가정하면 설명이 필요없는 T-SQL 오류 메시지를 찾았습니다.
"HAVING 절 또는 선택 목록에 포함 된 하위 쿼리에 있고 집계되는 열이 외부 참조 인 경우가 아니면 집계는 WHERE 절에 나타나지 않을 수 있습니다."
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 ;
최신 정보.
위의 내용은 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 ;
HAVING은 집계 함수가있는 WHERE와 같거나 하위 쿼리를 사용할 수 있습니다.
select EmployeeId, sum(amount)
from Sales
group by Employee
having sum(amount) > 20000
또는
select EmployeeId, sum(amount)
from Sales
group by Employee
where EmployeeId in (
select max(EmployeeId) from Employees)
WHERE 절에서 직접 집계를 사용할 수 없습니다. 그것이 HAVING 절의 목적입니다.
WHERE 절에 집계를 포함하는 하위 쿼리를 사용할 수 있습니다.
UPDATED query:
select id from t where id < (select max(id) from t);
It'll select all but the last row from the table t.
SELECT COUNT( * )
FROM agents
HAVING COUNT(*)>3;
See more below link:
http://www.w3resource.com/sql/aggregate-functions/count-having.php#sthash.90csRM4I.dpuf][1] call me if any query:85110 51548
http://www.w3resource.com/sql/aggregate-functions/count-having.php
Another solution is to Move the aggregate fuction to Scalar User Defined Function
Create Your Function:
CREATE FUNCTION getTotalSalesByProduct(@ProductName VARCHAR(500))
RETURNS INT
AS
BEGIN
DECLARE @TotalAmount INT
SET @TotalAmount = (select SUM(SaleAmount) FROM Sales where Product=@ProductName)
RETURN @TotalAmount
END
Use Function in Where Clause
SELECT ProductName, SUM(SaleAmount) AS TotalSales
FROM Sales
WHERE dbo.getTotalSalesByProduct(ProductName) > 1000
GROUP BY Product
References:
Hope helps someone.
참고URL : https://stackoverflow.com/questions/6319183/aggregate-function-in-sql-where-clause
'Programing' 카테고리의 다른 글
안드로이드 활동에 창 com.android.internal.policy.impl.phonewindow $ decorview가 유출되었습니다. (0) | 2020.11.14 |
---|---|
TeamCity가 관리자 암호를 잊어 버린 경우-어디에서 확인해야합니까? (0) | 2020.11.14 |
.NET 4.5로 업그레이드 한 후 iFrame 파서 오류 (0) | 2020.11.14 |
R에서 참조로 전달할 수 있습니까? (0) | 2020.11.14 |
: has_many : through 연관에 조인이있는 범위 (0) | 2020.11.14 |