我正在运行一个复杂且昂贵的查询来查找按另一个属性分组的函数的 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() 作为子查询运行并以大大降低的成本进行比较。这是要走的路吗?