私はかなり経験豊富な SQL Server 開発者ですが、この問題には本当に困惑しています。
私には機能があります。関数は、このようなテーブルを参照しています...
PERFORMANCE_ID, JUDGE_ID, JUDGING_CRITERIA, SCORE
--------------------------------------------------
101, 1, 'JUMP_HEIGHT', 8
101, 1, 'DEXTERITY', 7
101, 1, 'SYNCHRONIZATION', 6
101, 1, 'SPEED', 9
101, 2, 'JUMP_HEIGHT', 6
101, 2, 'DEXTERITY', 5
101, 2, 'SYNCHRONIZATION', 8
101, 2, 'SPEED', 9
101, 3, 'JUMP_HEIGHT', 9
101, 3, 'DEXTERITY', 6
101, 3, 'SYNCHRONIZATION', 7
101, 3, 'SPEED', 8
101, 4, 'JUMP_HEIGHT', 7
101, 4, 'DEXTERITY', 6
101, 4, 'SYNCHRONIZATION', 5
101, 4, 'SPEED', 8
この例では、4 人の審査員 (ID 1、2、3、および 4) が、4 つの異なる基準 (JUMP_HEIGHT、DEXTERITY、SYNCHRONIZATION、SPEED) に対してパフォーマンス (101) を審査しています。
(私の実際のデータでは、10 以上の基準と少なくとも 6 人の審査員がいることに注意してください。)
JUDGING_CRITERIA ごとに結果をスコアに集計し、それらを合計して最終スコアに集計したい...次のような...
SELECT SUM (Avgs) FROM
(SELECT AVG(SCORE) Avgs
FROM PERFORMANCE_SCORES
WHERE PERFORMANCE_ID=101
GROUP BY JUDGING_CRITERIA) result
しかし...それは、各JUDGING_CRITERIAグループの最高値と最低値をAVGから除外したいという点で、私が望んでいるものではありません。それは私が理解できない部分です。AVG は、GROUPING FOR EACH JUDGING_CRITERIA の MIDDLE 値にのみ適用する必要があります。JUMP_HEIGHT の HI 値と LO 値は平均に含めないでください。DEXTERITY の HI 値と LO 値は平均に含めないでください。等。
これは、カーソルを使用して各基準の hi と lo を NULL に設定することで実現できることを知っています。しかし、これは FUNCTION であり、非常に高速である必要があります。
これを SET 操作として実行する方法があるかどうか疑問に思っていますが、それでも集約から HI と LO を自動的に除外しますか?
ご協力いただきありがとうございます。おそらく高度なSQL構文で実行できると思いますが、わかりません。
最後に一つだけ。この例は、実際に私が解決しようとしている問題を単純化したものです。簡単にするために、ここでは言及していない他の制約があります。
セス