4

問題があります。使用しているツールはサブクエリを受け入れません。したがって、次のようなユーザー定義のカスタム集計関数を作成する必要があります。

例:col1とcol2のデータ型は数値です。

**col1**    **col2**
243         401
57489       400
2789        401
598         400

SELECT sum(MinValue) 
FROM
    (SELECT Min(col1) AS MinValue,col2
    FROM
    Table1
    GROUP BY col2)

Output:841

上記のクエリではなく、単一の関数を使用して、このクエリを単一のステップで機能させたいと思います。何かのようなもの:

SELECT MyMinSum(col1, col2),col3 from table1 Group by col3;

私はそれが理にかなっていることを願っています。これについてのご意見をいただければ幸いです。

4

2 に答える 2

1

サブクエリを使用してselectステートメントで取得したものと同じ出力を探している場合は、次の方法で同じ結果を得ることができます

         SELECT   SUM (MIN (col1)) AS minvalue
 FROM   Table1
GROUP BY   col2
于 2012-11-07T05:37:15.840 に答える
0

最善の方法は、SQLがツールで機能することを前提として、SQLをビューに配置することです。

ただし、カスタム集計関数が本当に必要な場合は、主に2つの方法があります。一般的な方法は、一般的なSTRAGGなどのOracle DataCartridgeInterfaceを使用することです。しかし、私の経験では、データカートリッジは混乱を招き、バグが多く、低速です。通常、この関数ははるかにうまく機能します。以下の例、またはこのSQLFiddleを参照してください。COLLECT

create table table1(col1 number, col2 number, col3 number)
/

insert into table1
select 243,   401, 1 from dual union all
select 57489, 400, 1 from dual union all
select 2789,  401, 1 from dual union all
select 598,   400, 1 from dual union all
select 598,   400, 2 from dual
/

create or replace type col1_col2_obj is object
(
  col1 number,
  col2 number
)
/

create or replace type col1_col2_nt is table of col1_col2_obj
/

create or replace function MyMinSum(p_col1_col2_nt in col1_col2_nt)
return number is
  v_result number;
begin
  SELECT sum(MinValue)
  INTO v_result
  FROM
  (
    SELECT Min(col1) AS MinValue,col2
    FROM
    table(p_col1_col2_nt)
    GROUP BY col2
  );

  return v_result;
end;
/

select
  MyMinSum(cast(collect(col1_col2_obj(col1, col2)) as col1_col2_nt)) test
  ,col3
from table1
group by col3
/


TEST    COL3
841     1
598     2
于 2012-11-12T15:04:15.020 に答える