1

このような選択のサブクエリで使用できるように、内部結合のテーブルのファクトレーションとテーブルメンバーにエイリアスを付与しようとしています

    SELECT description,
       Avg((SELECT Count(*)
            FROM   facturation F
            WHERE  F.membreid = M.membreid))
FROM   v_type_membre
       INNER JOIN v_membre M
               ON v_type_membre.typeid = M.typeid
       INNER JOIN v_facturation
               ON M.membreid = v_facturation.membreid
GROUP  BY description
ORDER  BY description; 

エラーが表示されるのはなぜですか :

Error at Command Line:3 Column:31
Error report:
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:

ありがとうございました

4

2 に答える 2

2

あなたの元の問題は、エイリアスを囲む引用符でした。それらは必要ありません。

同様に、相関サブクエリは必要ありません。クエリは次のように記述できます。

select description, avg(cnt*1.0) as avg_cnt
FROM v_type_membre INNER JOIN v_membre M
     ON v_type_membre.typeid = M.typeid INNER JOIN
     v_facturation
     ON M.membreid = v_facturation.membreid inner join
     (SELECT f.membreid, Count(*) as cnt
      FROM facturation F
      group by F.membreid
     ) cnt
     on cnt.membreid = M.membreid
GROUP  BY description
ORDER  BY description;  

わかりやすくするだけでなく、必要に応じて、最小値と最大値を含めたり、値が 10 回と 42 回になった回数をカウントしたりすることもできます。

また、カウントを浮動小数点数に変換するために「*1.0」を追加しました。一部のデータベースでは、整数の平均は整数であり、それはおそらくあなたが望むものではありません。オラクルは平均を正しく行っていますが、私はこれを行う習慣があります。

于 2012-05-31T20:34:47.683 に答える
1

副選択を結合に移動してみてください(v_facturation結合は必要ないと思います。念のため、さらに情報が必要です(v_*はビューだと思います)。);

SELECT description, Avg(F.fact_cnt)
FROM   v_type_membre
       INNER JOIN v_membre AS M
               ON v_type_membre.typeid = M.typeid
--       INNER JOIN v_facturation
--               ON M.membreid = v_facturation.membreid
       INNER JOIN (SELECT membreid, Count(*) 'fact_cnt'
            FROM   facturation group by membreid) AS F
            ON  F.membreid = M.membreid
GROUP  BY description
ORDER  BY description;

(申し訳ありませんが、現在利用可能なOracleも他のDBもありません。これはすべて私の頭の中で解析およびコンパイルされています...)

于 2012-05-31T20:35:30.023 に答える