[SQL] SQL에서 곱셈 집계 연산자
SQLSQL에서 곱셈 집계 연산자
SQL에서 AVG, SUM, COUNT 등의 통합 운영이있다. 왜 곱셈 연산자를하지 않는 이유는 무엇입니까? "MUL"또는 뭔가.
나는 오라클, MSSQL, MySQL을 위해 존재, 궁금 해서요? 그렇지 않을 경우이 동작을 줄 것입니다 해결 방법이 있습니까?
해결법
-
==============================
1.MUL함으로써 값의 진보적 인 곱셈을 의미합니까?
MUL함으로써 값의 진보적 인 곱셈을 의미합니까?
심지어 일부 작은 크기의 100 행 (10 초를 말한다)와 함께, 귀하의 MUL (열)는 모든 데이터 유형을 오버플 것입니다! MIS / AB-사용, 사용하기에 매우 제한된 범위의 이러한 높은 확률로, 그것은 SQL 표준이 될 필요가 없습니다. 다른 사람들이 보여처럼 표준 (공통 사용) 방법을 사용하여 SQL에서 까다로운 계산을 할 수있는 많은 여러 가지 방법이 있습니다 단지로 운동의 수학적 방법이있다.
샘플 데이터 :
Column 1 2 4 8 COUNT : 4 items (1 for each non-null) SUM : 1 + 2 + 4 + 8 = 15 AVG : 3.75 (SUM/COUNT) MUL : 1 x 2 x 4 x 8 ? ( =64 )
완성도를 들어, 오라클, MSSQL, MySQL의 핵심 구현 *
Oracle : EXP(SUM(LN(column))) or POWER(N,SUM(LOG(column, N))) MSSQL : EXP(SUM(LOG(column))) or POWER(N,SUM(LOG(column)/LOG(N))) MySQL : EXP(SUM(LOG(column))) or POW(N,SUM(LOG(N,column)))
* LOG (0) 및 LOG (-ve)을 미정된다. 아래의 쇼는 SQL 서버에서이 문제를 처리하는 방법에 대해 설명합니다. 등가물은 동일한 개념을 사용하여, 다른 SQL 맛을 위해 찾을 수 있습니다
create table MUL(data int) insert MUL select 1 yourColumn union all select 2 union all select 4 union all select 8 union all select -2 union all select 0 select CASE WHEN MIN(abs(data)) = 0 then 0 ELSE EXP(SUM(Log(abs(nullif(data,0))))) -- the base mathematics * round(0.5-count(nullif(sign(sign(data)+0.5),1))%2,0) -- pairs up negatives END from MUL
성분 :
-
==============================
2.아니,하지만 당신은 수학을 사용할 수 있습니다 :
아니,하지만 당신은 수학을 사용할 수 있습니다 :
yourColumn은 0보다 항상 더 큰 경우 :
select EXP(SUM(LOG(yourColumn))) As ColumnProduct from yourTable
-
==============================
3.그래서 여기있다, 오라클 대답은 아직 행방 불명입니다 참조 :
그래서 여기있다, 오라클 대답은 아직 행방 불명입니다 참조 :
SQL> with yourTable as 2 ( select 1 yourColumn from dual union all 3 select 2 from dual union all 4 select 4 from dual union all 5 select 8 from dual 6 ) 7 select EXP(SUM(LN(yourColumn))) As ColumnProduct from yourTable 8 / COLUMNPRODUCT ------------- 64 1 row selected.
문안 인사, 롭.
-
==============================
4.PostgreSQL을, 당신은 http://www.postgresql.org/docs/8.2/interactive/sql-createaggregate.html를 참조하십시오 자신의 집계 함수를 만들 수 있습니다
PostgreSQL을, 당신은 http://www.postgresql.org/docs/8.2/interactive/sql-createaggregate.html를 참조하십시오 자신의 집계 함수를 만들 수 있습니다
MySQL의에 집계 함수를 만들려면, 당신은 .so를 (리눅스) 또는 .dll (창) 파일을 작성해야합니다. 예는 여기에 표시됩니다 : http://www.codeproject.com/KB/database/mygroupconcat.aspx
나는 MSSQL, 오라클에 대해 잘 모르겠지만, 나는 그들이 아니라 사용자 정의 집계를 만들 수있는 옵션이 있습니다 내기.
-
==============================
5.숫자가 탑재과 같이 매우 신속하게 데이터 유형을 깰 수 있습니다.
숫자가 탑재과 같이 매우 신속하게 데이터 유형을 깰 수 있습니다.
LOG / EXP 사용하기 때문에 LOG를 이용할 경우 실패 할 수 <= 0 까다 롭다. 이 질문에 대한 해결책을 쓴이와 거래
-
==============================
6.MS SQL에서 CTE를 사용 :
MS SQL에서 CTE를 사용 :
CREATE TABLE Foo(Id int, Val int) INSERT INTO Foo VALUES(1, 2), (2, 3), (3, 4), (4, 5), (5, 6) ;WITH cte AS ( SELECT Id, Val AS Multiply, row_number() over (order by Id) as rn FROM Foo WHERE Id=1 UNION ALL SELECT ff.Id, cte.multiply*ff.Val as multiply, ff.rn FROM (SELECT f.Id, f.Val, (row_number() over (order by f.Id)) as rn FROM Foo f) ff INNER JOIN cte ON ff.rn -1= cte.rn ) SELECT * FROM cte
-
==============================
7.확실하지 오라클이나 SQL 서버,하지만 MySQL은 당신이 방금 * 사용할 수 있습니다에 대한 평소처럼.
확실하지 오라클이나 SQL 서버,하지만 MySQL은 당신이 방금 * 사용할 수 있습니다에 대한 평소처럼.
mysql> select count(id), count(id)*10 from tablename; +-----------+--------------+ | count(id) | count(id)*10 | +-----------+--------------+ | 961 | 9610 | +-----------+--------------+ 1 row in set (0.00 sec)
from https://stackoverflow.com/questions/5416169/multiplication-aggregate-operator-in-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 두 개의 서로 다른 날짜에서 년의 차이를 얻으려면? (0) | 2020.03.30 |
---|---|
[SQL] SQL : 결과 행을 여러 번, 그리고 수 행을 반복 (0) | 2020.03.30 |
[SQL] SQL Server는 날짜 시간에 대 Varchar로 변환 (0) | 2020.03.30 |
[SQL] Parameters.Add (문자열, 객체)와 Parameters.AddWithValue의 차이 (0) | 2020.03.30 |
[SQL] 정수 진수와 진수로 정수로 변환 (0) | 2020.03.30 |