복붙노트

[SQL] SQL 집계 함수를 WHERE 절

SQL

SQL 집계 함수를 WHERE 절

대학 시험에서 질문이 있었다; WHERE 절 것이 가능 SQL에서 집계 함수를 사용하는 것입니다.

난 항상 그렇게 할 수없는 생각 나는 또한 가능한 것이 얼마나 어떤 예를 찾을 수 없습니다. 하지만 내 대답은 거짓으로 표시되고 지금은 어디에서 집계 함수를 사용할 수있는 경우에 알고 싶어요. 그것은 불가능하다 또한 경우에 그것이 설명하는 사양에 대한 링크를 얻을 것이 좋을 것이다.

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    3.당신은 WHERE 절에 직접 집계를 사용할 수 없습니다; 그 HAVING 절을위한거야.

    당신은 WHERE 절에 직접 집계를 사용할 수 없습니다; 그 HAVING 절을위한거야.

    당신은 WHERE 절에 집계가 포함 된 하위 쿼리를 사용할 수 있습니다.

  4. ==============================

    4.업데이트] 쿼리 :

    업데이트] 쿼리 :

    select id from t where id < (select max(id) from t);
    

    그것은 제외한 모든 테이블 t에서 마지막 행을 선택합니다.

  5. ==============================

    5.

    SELECT COUNT( * )   
    FROM agents   
    HAVING COUNT(*)>3;  
    

    아래 링크에 대한 자세한 내용보기 :

  6. ==============================

    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.

    희망은 사람을 도움이됩니다.

  7. from https://stackoverflow.com/questions/6319183/aggregate-function-in-sql-where-clause by cc-by-sa and MIT license