Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get minimum value greater than zero

I have the following table:

column1   column2   column3
   3         2         0
   5         9         2
   1         4         6

When I run the following code:

SELECT
  id_function = @param,
  MIN(t1.column1) AS c1min, 
  MAX(t1.column2) AS c2max,
  MIN(t1.column3) AS c3min
FROM
  table1 (NOLOCK) AS t1
WHERE
  t1.id = @param

I get:

c1min   c2max   c3min
  1       9       0

My problem is that c3min must be the minimum value greater than zero. The result I need should be:

c1min   c2max   c3min
  1       9       2

Is there any way to do that without using a subselect? Any help will be appreciated.

Thank you!

like image 764
stefanobaldo Avatar asked Nov 29 '13 11:11

stefanobaldo


2 Answers

I would recommend using nullif() so your query would be

SELECT id_function = @param,
   MIN(t1.column1) AS c1min, 
   MAX(t1.column2) AS c2max,
   MIN(NULLIF(t1.column3,0) AS c3min
FROM table1 (NOLOCK) AS t1
WHERE t1.id = @param

that way you don't risk altering your results, e.g. if your real minimum in column 3 is 100 the previous answer would affect your results, and also if you only have zeros in your column 3 column the previous answer would also deliver incorrect results

like image 93
Hedinn Avatar answered Oct 18 '22 04:10

Hedinn


You could use a case to set the 0 value to a higher value on your min() condition

SELECT id_function = @param,
       MIN(t1.column1) AS c1min, 
       MAX(t1.column2) AS c2max,
       MIN(case when t1.column3 = 0 then 99 else t1.column3 end) AS c3min
FROM table1 (NOLOCK) AS t1
WHERE t1.id = @param
like image 5
juergen d Avatar answered Oct 18 '22 05:10

juergen d