Mysql 选择表中的所有最小值和最大值
我有一个Mysql 选择表中的所有最小值和最大值,mysql,Mysql,我有一个SQL表,如下所示: pr_键 fr_键 属性1 属性2 p_1 f_1 100 150 p_2 f_1 150 200 p_3 f_1 200 250 p_4 f_2 100 150 p_5 f_2 150 200 p_6 f_2 200 250 一种方法在where子句中使用相关子查询: select t.* from t where t.attr1 = (select min(t2.attr1) from t t2 where t2.fr_Key = t.fr_Key) or
SQL表
,如下所示:
pr_键
fr_键
属性1
属性2
p_1
f_1
100
150
p_2
f_1
150
200
p_3
f_1
200
250
p_4
f_2
100
150
p_5
f_2
150
200
p_6
f_2
200
250
一种方法在
where
子句中使用相关子查询:
select t.*
from t
where t.attr1 = (select min(t2.attr1) from t t2 where t2.fr_Key = t.fr_Key) or
t.attr1 = (select max(t2.attr1) from t t2 where t2.fr_Key = t.fr_Key) or
t.attr2 = (select min(t2.attr2) from t t2 where t2.fr_Key = t.fr_Key) or
t.attr2 = (select max(t2.attr2) from t t2 where t2.fr_Key = t.fr_Key);
编辑:
事实上,我想你需要两列中的最小值和最大值。如果是:
例如
虽然问题可能重复,但这是关于两列,而不是一列,因此建议的重复是不合适的。
select t.*
from t
where least(t.attr1, t.attr2) =
(select least(min(t2.attr1), min(t2.attr2))
from t t2
where t2.fr_Key = t.fr_Key
) or
greatest(t.attr1, t.attr2) =
(select greatest(max(t2.attr1), max(t2.attr2))
from t t2
where t2.fr_Key = t.fr_Key
)
SELECT DISTINCT a.*
FROM my_table a
JOIN
( SELECT fr_key,1 attr, MIN(attr_1) val FROM my_table GROUP BY fr_key
UNION
SELECT fr_key,2, MIN(attr_2) val FROM my_table GROUP BY fr_key
UNION
SELECT fr_key,1 attr, MAX(attr_1) val FROM my_table GROUP BY fr_key
UNION
SELECT fr_key,2, MAX(attr_2) val FROM my_table GROUP BY fr_key
) b
ON b.fr_key = a.fr_key
AND CASE WHEN attr = 1 THEN b.val = attr_1 ELSE b.val = attr_2 END
;