別の属性でグループ化された関数の MIN() 値を見つけるために、複雑でコストのかかるクエリを実行しています。しかし、必要なのは値だけではありません。それを生成するエントリと値が必要です。
私の現在の疑似クエリは次のようになります。
SELECT MIN(COSTLY_FUNCTION(a.att1,a.att2,$v1,$v2)) FROM (prefiltering) as a GROUP BY a.group_att;
しかし、私は欲しいa.*
とMIN(COSTLY_FUNCTION(a.att1,a.att2,$v1,$v2))
私の結果として。
私が考えることができる唯一の方法は、この醜い獣を使用することです:
SELECT a1.*, COSTLY_FUNCTION(a1.att1,a1.att2,$v1,$v2)
FROM (prefiltering) as a1
WHERE COSTLY_FUNCTION(a1.att1,a1.att2,$v1,$v2) =
(SELECT MIN(COSTLY_FUNCTION(a.att1,a.att2,$v1,$v2)) FROM (prefiltering) as a GROUP BY a.group_att)
しかし今、私は prefiltering_query を 2 回実行しており、コストのかかる関数を 2 回実行する必要があります。これはばかげており、ここで何か深刻な問題を抱えていることを願っています。
考えられる解決策は?:
今、次のものを含む一時テーブルを作成できることに気付きました。
(SELECT a1.*, COSTLY_FUNCTION(a1.att1,a1.att2,$v1,$v2) as complex FROM (prefiltering) as a1)
次に、MIN() をサブクエリとして実行し、コストを大幅に削減して比較します。それは行く方法ですか?