0

このクエリを作成しようとしています。これにより、クエリ全体をグループ化する型の値を含む列を除くすべての列の平均値が計算されます。

したがって、たとえば4つのタイプの場合、結果のテーブルの各列には、他の3つのタイプの値すべての平均が含まれます。現在のタイプの行を除外する必要があります。

例として、各タイプの平均値をそれ自体で計算すると、クエリは次のようになります。

SELECT

SUM(some value) / COUNT(TYPE)

FROM TEMPTABLE
GROUP BY TYPE

今、私は他の3つの合計平均を計算しようとしています。ありがとう。

4

5 に答える 5

1

1つのクエリを実行して、異なるタイプとLEFT JOIN同じテーブルを取得し、タイプの不等式をチェックできます。

SELECT t1.type,
       SUM(t2.some_value) / COUNT(t2.type)
FROM ( SELECT DISTINCT type FROM temptable ) t1
LEFT JOIN temptable t2 ON ( t1.type <> t2.type )
GROUP BY t1.type

平均だけが必要なので、行を置き換えることができます

FROM ( SELECT DISTINCT type FROM temptable ) t1

FROM temptable t1

ただし、行数が早く減るので、最初のソリューションの方がパフォーマンスが向上する可能性があります。

于 2010-07-23T11:44:58.113 に答える
0

Sybaseでも動作するはずです:

SELECT
   SUM(some value) / SUM(CASE WHEN TYPE = 1 THEN 1 ELSE 0 END)
FROM TEMPTABLE
GROUP BY TYPE
于 2010-07-23T11:55:35.077 に答える
0

これはあなたが必要とすることをしますか?

(おそらく、どのCASEタイプも返されない可能性がある場合にゼロ除算エラーを回避するための別のステートメントを使用します。また、typeNULLの場合については明示的に説明していません)

SELECT

SUM(CASE WHEN TYPE <> 'Type1' THEN someValue ELSE 0 END) / 
     SUM(CASE WHEN TYPE = 'Type1' THEN 1 ELSE 0 END) AS T1,

SUM(CASE WHEN TYPE <> 'Type2' THEN someValue ELSE 0 END) / 
     SUM(CASE WHEN TYPE = 'Type2' THEN 1 ELSE 0 END) AS T2,

SUM(CASE WHEN TYPE <> 'Type3' THEN someValue ELSE 0 END) / 
     SUM(CASE WHEN TYPE = 'Type3' THEN 1 ELSE 0 END) AS T3,

SUM(CASE WHEN TYPE <> 'Type4' THEN someValue ELSE 0 END) / 
     SUM(CASE WHEN TYPE = 'Type4' THEN 1 ELSE 0 END) AS T4
FROM TEMPTABLE
于 2010-07-23T13:30:50.230 に答える
0

ここでの開始点は、タイプと誘惑可能オブジェクトの間でデカルト結合を作成することです(テーブル構造を推測すると、type(id、type)、valueTable(id、type_id、some_value))

次のクエリ

SELECT t.type、SUM(vt.someValue)/ COUNT(*)AS sum FROM type t、valueTable vt WHERE vt.type_id!= t.id GROUP BY t.type

トリックを行う必要があります。

于 2010-07-23T11:51:59.187 に答える
0

私はあなたがこれを使うことができると思います:

SELECT type, avg(col_01)
FROM myTable
GROUP BY type
于 2010-07-23T17:11:10.473 に答える