Я выполняю сложный и дорогостоящий запрос, чтобы найти значения 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 раза и мне нужно запуститьдорогая функция в два раза.Это смешно, и я надеюсь, что я делаю что-то серьезно неправильно.
Возможное решение?:
Только сейчас я понимаю, что могу создать временную таблицу, содержащую:
(SELECT a1.*, COSTLY_FUNCTION(a1.att1,a1.att2,$v1,$v2) as complex FROM (prefiltering) as a1)
, а затем запустите MIN () как подзапрос и сравните его при значительно сниженной стоимости.Это путь?