我得到了下表(tablea):
x y z
--------------------
3 0 2
0 0 3
0 3 2
0 0 1
0 0 4
我想选择特定行中的所有值。该行必须按该顺序满足特定要求(按优先级排序)
我得到了以下满足要求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。
答案 0 :(得分:1)
您可以使用派生表来获取x和y的最小值。然后join
将结果发送到原始表并选择z的最小值。
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 by
和limit
:
select t.*
from t
where z between 2 and 4
order by x, y, z
limit 1;
这将按顺序选择x
,y
,z
的最低值(最低x,如果有关系则选择最低y,如果存在关系则选择最低z)。如果您有其他定义,则可以包含该定义。例如,对于最低的总和:
select t.*
from t
where z between 2 and 4
order by x + y + z
limit 1;