[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.
select exp(sum(ln(col))) from table;
편집하다:
항상 COL> 0 경우
-
==============================
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.여기에 그것을 할 수있는 또 다른 방법이다. 이것은 확실히 그것을 할 수있는 더 이상 방법이지만 재미있는 프로젝트의 일환이었다.
여기에 그것을 할 수있는 또 다른 방법이다. 이것은 확실히 그것을 할 수있는 더 이상 방법이지만 재미있는 프로젝트의 일환이었다.
당신은 롤이 하나 다시 학교에 도달 할 수있어. 그들은 키 여기에 기억 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."SQL"의 다양한 implmentations이있다. 당신은 "SQL 있는가"말할 때 당신은 SQL의 특정의 ANSI 버전 또는 공급 업체의 특정 구현을 참조한다. DavidB의 대답은 몇 가지 다른 환경 제가 테스트 한하지만 환경에 따라 당신이 쓸 수 또는 정확히 당신이 요구하는 것 같은 기능을 찾을에서 작동 하나입니다. 당신은 마이크로 소프트 SQL 서버 2005를 사용 하였다 말해, 다음 가능한 해결책은 당신이 그것을 쓴대로 정확하게 일을 원래 쿼리를 허용 할 .NET 코드라는 이름의 제품에서 사용자 지정 애그리 게이터 (aggregator)를 작성하는 것입니다.
"SQL"의 다양한 implmentations이있다. 당신은 "SQL 있는가"말할 때 당신은 SQL의 특정의 ANSI 버전 또는 공급 업체의 특정 구현을 참조한다. DavidB의 대답은 몇 가지 다른 환경 제가 테스트 한하지만 환경에 따라 당신이 쓸 수 또는 정확히 당신이 요구하는 것 같은 기능을 찾을에서 작동 하나입니다. 당신은 마이크로 소프트 SQL 서버 2005를 사용 하였다 말해, 다음 가능한 해결책은 당신이 그것을 쓴대로 정확하게 일을 원래 쿼리를 허용 할 .NET 코드라는 이름의 제품에서 사용자 지정 애그리 게이터 (aggregator)를 작성하는 것입니다.
-
==============================
5.C #에서 당신이해야 할 수도 있습니다 :
C #에서 당신이해야 할 수도 있습니다 :
SELECT EXP(SUM(LOG([col]))) FROM table;
-
==============================
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;
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
'SQL' 카테고리의 다른 글
[SQL] 나는 JDBC 응용 프로그램에서 PreparedStatement.cancel ()를 호출 할 때, 실제로 오라클 데이터베이스에 죽일 수 있습니까? (0) | 2020.06.08 |
---|---|
[SQL] 여러 열이있는 SQL 피벗 (0) | 2020.06.08 |
[SQL] 나는 SQL 서버의 XML 값에서 요소 이름의 목록을 얻을 수있는 방법 (0) | 2020.06.08 |
[SQL] SQL 서버 데이터 변경 사항을 감사 (0) | 2020.06.08 |
[SQL] MySQL의 최적화 INSERT 속도 때문에 지표의 둔화되고 (0) | 2020.06.08 |