Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择表中的所有最小值和最大值_Mysql - Fatal编程技术网

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
;