Mysql 获取两列及其最大值和最小值的每个唯一组合的整个数据集

Mysql 获取两列及其最大值和最小值的每个唯一组合的整个数据集,mysql,sql,mariadb,greatest-n-per-group,Mysql,Sql,Mariadb,Greatest N Per Group,我正在拼命搜索一个查询,该查询为我提供了以下查询的所有数据集: 这将返回一个如下所示的表 col 1 | col2 | max(col3) | min(col4) ------ | ------ | --------- | ------ 10 | 0.5 | 20 | -5 10 | 0.9 | 30 | -2 我需要的是每个max和min以及每个实体的数据集(整行)。我可以通过一个类似于 从表1中选择*,其中col1=10和(

我正在拼命搜索一个查询,该查询为我提供了以下查询的所有数据集:

这将返回一个如下所示的表

col 1  | col2   | max(col3) | min(col4)
------ | ------ | --------- | ------ 
10     | 0.5    | 20        | -5
10     | 0.9    | 30        | -2
我需要的是每个max和min以及每个实体的数据集(整行)。我可以通过一个类似于

从表1中选择*,其中col1=10和(col2=0.5或col2=0.9)和((col3=20或col4=-5)或(col3=30或col4=-2))
返回4个数据集

但每次添加MAX、MIN或groupby时,查询都会变得更加难看(这是用户对程序所做的)

让我试着用一句话来解释它:我正在寻找一种方法,将数据集显示为col1和col2值的每个唯一组合的每个最大值和最小值(不是col1,col2)

有没有一种方法可以在一个查询中实现这一点

如果你需要更多的细节,不要害怕评论

编辑1 数据集

id   | col 1  | col2   | col3   | col4
---- | ------ | ------ | ------ | ------ 
  0  |   10   |  0.5   |  20    |  0
  1  |   10   |  0.5   |  15    | -1
  2  |   10   |  0.5   |  17    | 12
  3  |   10   |  0.5   |  11    |  3
  4  |   10   |  0.5   |   5    | -5
  5  |   10   |  0.9   |  10    |  1
  6  |   10   |  0.9   |  22    | -1
  7  |   10   |  0.9   |  15    | -2
  8  |   10   |  0.9   |  30    |  3
id   |  col 1  | col2   | col3   | col4
---- |  ------ | ------ | ------ | ------ 
  0  |   10    |  0.5   |  20    |  0
  4  |   10    |  0.5   |  5     | -5
  7  |   10    |  0.9   |  15    | -2
  8  |   10    |  0.9   |  30    |  3
所需输出

id   | col 1  | col2   | col3   | col4
---- | ------ | ------ | ------ | ------ 
  0  |   10   |  0.5   |  20    |  0
  1  |   10   |  0.5   |  15    | -1
  2  |   10   |  0.5   |  17    | 12
  3  |   10   |  0.5   |  11    |  3
  4  |   10   |  0.5   |   5    | -5
  5  |   10   |  0.9   |  10    |  1
  6  |   10   |  0.9   |  22    | -1
  7  |   10   |  0.9   |  15    | -2
  8  |   10   |  0.9   |  30    |  3
id   |  col 1  | col2   | col3   | col4
---- |  ------ | ------ | ------ | ------ 
  0  |   10    |  0.5   |  20    |  0
  4  |   10    |  0.5   |  5     | -5
  7  |   10    |  0.9   |  15    | -2
  8  |   10    |  0.9   |  30    |  3

如果您知道两个列值:这将是col3在这两个列值处最大和最小的数据集。请记住,对查询的约束是两列值。复合查询应该类似于:

 select * from table1 as A where col1 = '$value1' and col2 = '$value2' and    col3=(select MAX(col3) FROM table1 as B where A.col1 = B.col1 and A.col2 = B.col2) and col4=(select MIN(col4) FROM table1 as C where A.col1 = C.col1 and A.col2 = C.col2)";
这应该做到:

SELECT A.* FROM

table1 A

INNER JOIN

(SELECT 
col1, 
col2, 
MAX(col3) AS MAX_col3, 
MIN(col4) AS MIN_col4 
FROM table1 
GROUP BY 
col1, 
col2) B

ON A.col1 = B.col1
AND A.col2 = B.col2
AND A.col3 = B.MAX_col3
AND A.col4 = B.MIN_col4

请发布示例数据集和所需的输出。执行“groupwise max”很麻烦。请看我添加的标签。@RickJames将研究这些问题,感谢您的输入。谢谢您的回答,Ultimate先生。很抱歉这么晚才回复你的答案,我没有时间工作(我是一名在职学生,在过去的几周里忙于大学事务)。您的答案几乎正确,“A.col3=B.MAX\u col3和A.col4=B.MIN\u col4”不会给出任何结果。如果你把它改为AND(A.col3=B.MAX\u col3或A.col4=B.MIN\u col4),我会接受你的答案。