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),我会接受你的答案。