0

次のテーブルにアクセスしています。

    entity ratingA ratingB ratingC 
    XYZ     0-100   0-100   0-100
    ABC     0-100   0-100   0-100

各エンティティ (フィールド: ratingA、ratingB、ratingC) の 3 つの列ごとにいくつかの単純な集計関数 (SUM、MAX、AVE) を実行するクエリを取得する必要がありますが、組み込み関数は一度に 1 つのフィールドに対してのみこれを実行します。いくつかのフィールド/列ではありません。

4

3 に答える 3

1

いくつかのフィールドの平均を取得するために本当にしなければならないことは、最初に、フィールドに入力できる方法の組み合わせを見つけることです。ex 3 つのフィールドは 8 つの方法で入力できます 1,0,0 - 0,1,0, - 0,0,1 - 1,1,0 - 1,0,1 - 0,1,1 - 1,1,1 - 0,0,0 ここで、すべてのフィールドが入力されている場合、0 は null フィールドを表し、フィールドを合計して 3 で割るように引数を強制することができますが、2 つまたは 1 つのフィールドのみが入力されている場合は、最初に null フィールドを認識する必要があります。それらを計算に追加しないでください。たとえば、2 つの null フィールドがある場合、平均 = 値を含むフィールドの値です。2 つのフィールドがいっぱいの場合、平均 = 2 つのフィールドの合計を 2 で割った値。したがって、そのレコードのヌル フィールドを数えてから、平均化されたフィールドの数からヌル フィールドの数を差し引く必要があります。

于 2013-12-20T01:13:55.973 に答える
0

それは実際には私自身の解決策ではありません。mysqlと同様に単一の行で複数の列のAVGを選択し、アクセスに採用する方法をここで見つけました(関数ISNULLがないため):

   (NZ(RatingA, 0) + NZ(RatingB, 0) + NZ(RatingC, 0)) /
   (IIF(ISNULL(RatingA), 0, 1) + IIF(ISNULL(RatingB), 0, 1) + IIF(ISNULL(RatingC), 0, 1))

フィールドENTITYでグループ化された新しいクエリに計算フィールドとして配置しました。

于 2013-03-13T10:53:16.913 に答える
0

私はそれの実際のコードを知りませんが、ここにいくつかの疑似コードがあります:

SELECT RatingA+RatingB+RatingC/3 AS average
WHERE entity = XYZ

すべてのエンティティのグループ化:

SELECT RatingA+RatingB+RatingC/3 AS average
GROUP BY entity

さらに良いのは:

TABLE
ENTITY     VALUE    RATINGTYPE
XYZ        7        A
XYZ        3        B
XYZ        5        C
ABC        4        A
ABC        4        D

将来拡張する予定がある場合は、無限の量のタイプがあります。

SELECT rating/count(rating) AS average
WHERE entity = XYZ
(AND TYPE = A) #If you want to sort by only one type.
于 2013-03-11T07:29:20.467 に答える