복붙노트

[SQL] SQL에서 곱셈 집계 연산자

SQL

SQL에서 곱셈 집계 연산자

SQL에서 AVG, SUM, COUNT 등의 통합 운영이있다. 왜 곱셈 연산자를하지 않는 이유는 무엇입니까? "MUL"또는 뭔가.

나는 오라클, MSSQL, MySQL을 위해 존재, 궁금 해서요? 그렇지 않을 경우이 동작을 줄 것입니다 해결 방법이 있습니까?

해결법

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

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

    2.아니,하지만 당신은 수학을 사용할 수 있습니다 :

    아니,하지만 당신은 수학을 사용할 수 있습니다 :

    yourColumn은 0보다 항상 더 큰 경우 :

    select EXP(SUM(LOG(yourColumn))) As ColumnProduct from yourTable
    
  3. ==============================

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

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

    5.숫자가 탑재과 같이 매우 신속하게 데이터 유형을 깰 수 있습니다.

    숫자가 탑재과 같이 매우 신속하게 데이터 유형을 깰 수 있습니다.

    LOG / EXP 사용하기 때문에 LOG를 이용할 경우 실패 할 수 <= 0 까다 롭다. 이 질문에 대한 해결책을 쓴이와 거래

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

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

    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)
    
  8. from https://stackoverflow.com/questions/5416169/multiplication-aggregate-operator-in-sql by cc-by-sa and MIT license