복붙노트

[SQL] 오라클 SQL의 SUM 함수가 같은 제품 기능은 무엇입니까?

SQL

오라클 SQL의 SUM 함수가 같은 제품 기능은 무엇입니까?

나는이 찾고 동료가 있고, 나는 그런 아무것도으로 실행 적 기억하지 않습니다.

당신이 그것을 시뮬레이션 할 것이 합리적인 방법이 있습니까?

SELECT PRODUCT(X)
FROM
(
    SELECT 3 X FROM DUAL
    UNION ALL 
    SELECT 5 X FROM DUAL
    UNION ALL
    SELECT 2 X FROM DUAL
)

(30)를 얻을 것이다

해결법

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

    1.

    select exp(sum(ln(col)))
      from table;
    

    편집하다:

    항상 COL> 0 경우

  2. ==============================

    2.

    DECLARE @a int
    SET @a = 1
    -- re-assign @a for each row in the result
    -- as what @a was before * the value in the row
    SELECT @a = @a * amount
    FROM theTable
    

    유사하다 문자열 CONCAT을 할 수있는 방법이있다 :

    DECLARE @b varchar(max)
    SET @b = ""
    
    SELECT @b = @b + CustomerName
    FROM Customers
    
  3. ==============================

    3.여기에 그것을 할 수있는 또 다른 방법이다. 이것은 확실히 그것을 할 수있는 더 이상 방법이지만 재미있는 프로젝트의 일환이었다.

    여기에 그것을 할 수있는 또 다른 방법이다. 이것은 확실히 그것을 할 수있는 더 이상 방법이지만 재미있는 프로젝트의 일환이었다.

    당신은 롤이 하나 다시 학교에 도달 할 수있어. 그들은 키 여기에 기억 LOG는 지수의 역이라는 것이다합니다.

    LOG10 (X * Y) = LOG10 (X) + LOG10 (Y)

    또는

    LN (X * Y) = LN (X) + (LN) (Y) (LN = 자연 로그, 또는 단순히 로그베이스 10)

    예 X = Y = 5, 6

    Y = X * 30

    하지 않습니다 (X) +하지 않습니다 (I) = P 0.4

    LN (30) = 3.4

    E = 30 ^ 3.4, 그렇게 5 × 6

    EXP (3.4) = 30

    5, 6 각 테이블의 행을 점령한다면 위, 우리는 30를 얻기 위해 합계 지수를 가지고, 행을 요약, 각 값의 자연 로그를 취할.

    다음은 SQL Server에 대한 SQL 문에서 코드입니다. 일부 편집은 가능성이 오라클에서 실행하기 위해 필요합니다. 희망은 큰 차이가 아니지만 나는 CASE 문을 오라클에 동일하지 않습니다 적어도 생각한다. 행의 부호가 부의 경우 시험 거기에 몇 가지 여분의 물건을 알 수 있습니다.

    CREATE TABLE DUAL (VAL INT NOT NULL)
    INSERT DUAL VALUES (3)
    INSERT DUAL VALUES (5)
    INSERT DUAL VALUES (2)
    
        SELECT 
               CASE SUM(CASE WHEN SIGN(VAL) = -1 THEN 1 ELSE 0 END) % 2 
                   WHEN 1 THEN -1 
                   ELSE 1 
               END
             * CASE 
                    WHEN SUM(VAL) = 0           THEN 0 
                    WHEN SUM(VAL) IS NOT NULL   THEN EXP(SUM(LOG(ABS(CASE WHEN SIGN(VAL) <> 0 THEN VAL END)))) 
                    ELSE NULL 
               END
             * CASE MIN(ABS(VAL)) WHEN 0 THEN 0 ELSE 1 END
            AS PRODUCT 
          FROM DUAL
    
  4. ==============================

    4."SQL"의 다양한 implmentations이있다. 당신은 "SQL 있는가"말할 때 당신은 SQL의 특정의 ANSI 버전 또는 공급 업체의 특정 구현을 참조한다. DavidB의 대답은 몇 가지 다른 환경 제가 테스트 한하지만 환경에 따라 당신이 쓸 수 또는 정확히 당신이 요구하는 것 같은 기능을 찾을에서 작동 하나입니다. 당신은 마이크로 소프트 SQL 서버 2005를 사용 하였다 말해, 다음 가능한 해결책은 당신이 그것을 쓴대로 정확하게 일을 원래 쿼리를 허용 할 .NET 코드라는 이름의 제품에서 사용자 지정 애그리 게이터 (aggregator)를 작성하는 것입니다.

    "SQL"의 다양한 implmentations이있다. 당신은 "SQL 있는가"말할 때 당신은 SQL의 특정의 ANSI 버전 또는 공급 업체의 특정 구현을 참조한다. DavidB의 대답은 몇 가지 다른 환경 제가 테스트 한하지만 환경에 따라 당신이 쓸 수 또는 정확히 당신이 요구하는 것 같은 기능을 찾을에서 작동 하나입니다. 당신은 마이크로 소프트 SQL 서버 2005를 사용 하였다 말해, 다음 가능한 해결책은 당신이 그것을 쓴대로 정확하게 일을 원래 쿼리를 허용 할 .NET 코드라는 이름의 제품에서 사용자 지정 애그리 게이터 (aggregator)를 작성하는 것입니다.

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

    5.C #에서 당신이해야 할 수도 있습니다 :

    C #에서 당신이해야 할 수도 있습니다 :

    SELECT EXP(SUM(LOG([col]))) 
      FROM table;
    
  6. ==============================

    6.tuinstoel에 의해 허용 대답은 물론, 올바른 :

    tuinstoel에 의해 허용 대답은 물론, 올바른 :

    select exp(sum(ln(col)))
      from table;
    

    그러나 COL 유형 번호의 경우 대신 BINARY_DOUBLE를 사용하는 경우, 당신은 엄청난 성능 향상을 찾을 것을 알 수 있습니다. 이상적으로, 당신은 당신의 테이블에 BINARY_DOUBLE 열을 것이다, 그러나 그것은 가능하지, 당신은 여전히 ​​BINARY_DOUBLE에 안부를 캐스팅 할 수 있습니다. 나는이 주조를 들어, 여기에 설명하는 간단한 테스트에서 100 배 향상을 얻었다 :

    select exp(sum(ln(cast(col as binary_double))))
      from table;
    
  7. from https://stackoverflow.com/questions/403924/is-there-a-product-function-like-there-is-a-sum-function-in-oracle-sql by cc-by-sa and MIT license