MySQL - 选择另一列的最小值后,选择列的最小值,并在特定范围内

时间:2015-12-24 03:08:02

标签: mysql sql select

我得到了下表(tablea):

  x      y      z
--------------------
  3      0      2
  0      0      3
  0      3      2
  0      0      1
  0      0      4

我想选择特定行中的所有值。该行必须按该顺序满足特定要求(按优先级排序)

  1. z必须在特定范围内(2到4之间)
  2. x尽可能低
  3. y尽可能低
  4. z尽可能低
  5. 我得到了以下满足要求1,2和4的代码:

    Select x, MIN(z) AS z 
    FROM tablea 
    WHERE x = (SELECT MIN(x) FROM tablea where z between 2 AND 4)
    and z between 2 AND 4;
    

    我还需要要求3,我需要在代码中添加什么(或者完全不同的代码)?

    我的例子中的结果应该是x = 0 y = 0 z = 3.

    编辑:第二个例子

      x      y      z
    --------------------
      3      0      2
      1      0      3
      0      3      2
      0      0      1
      0      2      4
    

    这里应该选择x = 0 y = 2 z = 4。

2 个答案:

答案 0 :(得分:1)

您可以使用派生表来获取x和y的最小值。然后join将结果发送到原始表并选择z的最小值。

SQL Fiddle

select t.x, t.y, min(t.z) as z
from tablename t 
join (select min(x) as minx from tablename where z between 2 and 4) mx
on t.x = mx.minx
join (select min(y) as miny from tablename where z between 2 and 4) my
on t.y = my.miny
where t.z between 2 and 4
group by t.x,t.y

答案 1 :(得分:1)

使用order bylimit

select t.*
from t
where z between 2 and 4
order by x, y, z
limit 1;

这将按顺序选择xyz的最低值(最低x,如果有关系则选择最低y,如果存在关系则选择最低z)。如果您有其他定义,则可以包含该定义。例如,对于最低的总和:

select t.*
from t
where z between 2 and 4
order by x + y + z
limit 1;