[SQL] SQL 집계 함수를 WHERE 절
SQLSQL 집계 함수를 WHERE 절
대학 시험에서 질문이 있었다; WHERE 절 것이 가능 SQL에서 집계 함수를 사용하는 것입니다.
난 항상 그렇게 할 수없는 생각 나는 또한 가능한 것이 얼마나 어떤 예를 찾을 수 없습니다. 하지만 내 대답은 거짓으로 표시되고 지금은 어디에서 집계 함수를 사용할 수있는 경우에 알고 싶어요. 그것은 불가능하다 또한 경우에 그것이 설명하는 사양에 대한 링크를 얻을 것이 좋을 것이다.
해결법
-
==============================
1.당신은 DBMS를 언급하지 않았습니다. 당신이 MS SQL-Server를 사용하는 가정, I은 설명되는 T-SQL 오류 메시지를 발견했습니다 :
당신은 DBMS를 언급하지 않았습니다. 당신이 MS SQL-Server를 사용하는 가정, I은 설명되는 T-SQL 오류 메시지를 발견했습니다 :
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-서버와 MySQL에서 실행하지만 그것은 내가 기대했던 결과를 반환하지 않습니다. 다음 하나 더 가깝습니다. 나는 그것이 쿼리 서브 쿼리에서 사용되는 필드 CustomerID를 그룹화 BY가 및 외부 테이블의 첫 번째 경우 PRIMARY KEY이고 두 번째 경우에 그렇지 않은 조인과 관련이있다 생각한다.
5 개 이상 주문 (그리고 다른 사람에 대한 NULL)을 가진 사람들에 대한 모든 고객 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 ;
-
==============================
2.HAVING 집계 기능, 또는 하위 쿼리를 사용할 수 WHERE 같다.
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)
-
==============================
3.당신은 WHERE 절에 직접 집계를 사용할 수 없습니다; 그 HAVING 절을위한거야.
당신은 WHERE 절에 직접 집계를 사용할 수 없습니다; 그 HAVING 절을위한거야.
당신은 WHERE 절에 집계가 포함 된 하위 쿼리를 사용할 수 있습니다.
-
==============================
4.업데이트] 쿼리 :
업데이트] 쿼리 :
select id from t where id < (select max(id) from t);
그것은 제외한 모든 테이블 t에서 마지막 행을 선택합니다.
-
==============================
5.
SELECT COUNT( * ) FROM agents HAVING COUNT(*)>3;
아래 링크에 대한 자세한 내용보기 :
-
==============================
6.또 다른 해결책은 스칼라 사용자 정의 함수에 집계 함수를 이동하는 것입니다
또 다른 해결책은 스칼라 사용자 정의 함수에 집계 함수를 이동하는 것입니다
함수 만들기 :
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
WHERE 절에 사용 기능
SELECT ProductName, SUM(SaleAmount) AS TotalSales FROM Sales WHERE dbo.getTotalSalesByProduct(ProductName) > 1000 GROUP BY Product
참고 :
1. 2.
희망은 사람을 도움이됩니다.
from https://stackoverflow.com/questions/6319183/aggregate-function-in-sql-where-clause by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버는 두 날짜 사이의 전체 일 받기 (0) | 2020.05.09 |
---|---|
[SQL] 이 열에 고유 한 값을 선택 MYSQL (0) | 2020.05.09 |
[SQL] SQL 시간 간격 중복으로 행을 찾을 수있는 간단하고 효율적인 방법은 무엇입니까? (0) | 2020.05.09 |
[SQL] SQL 내부는 두 개 이상의 테이블을 조인 (0) | 2020.05.09 |
[SQL] PostgreSQL의 : psql의 명령 행 유틸리티를 사용하는 경우 Windows에서 문제를 인코딩 (0) | 2020.05.08 |