views:

295

answers:

2

I've been looking for a good equivalent to the Oracle LEAST function.

I'm hoping to implement a user defined function that does about 10 fairly complex calculations, and takes the minimum value from each of those calculations.

What I would do in Oracle is:

SELECT LEAST
(
select expression1 from dual,
select expression2 from dual,
select expression3 from dual
) from dual

See http://www.techonthenet.com/oracle/functions/least.php for more on Oracle LEAST.

If expression1 returned 10, expression2 return 5, and expression3 reeturned 30, the whole expression would return 5.

Because this may be about 10-20 calculations, the CASE WHEN syntax is going to get unwieldy fast.

Although the code will be more readable if we break it up more, I thought it would be more efficient to do it within one database query. Let me know I'm incorrect on that point, please!

I.e., is a stored procedure with 20 simple queries significantly slower than a stored procedure with one query that references a lot of tables all in one query.

+1  A: 

mayby this query could help:

 SELECT  min(c1)  
 from ( 
      select expression1 as c1  
      union all
      select expression2 as c1 
      union all 
      select expression3 as c1
 )
afftee
Thank you, this is very helpful!
Jade
A: 

You could try one of the solutions outlined in an old question of mine, or the simpler version I offered in my question.

CodeByMoonlight
This is very useful. If I could mark both as accepted answers, I would. Thank you!
Jade