我正在拼命搜索一个查询,该查询为我提供了以下查询的所有数据集:
SELECT col1, col2, MAX(col3), MIN(col4) FROM table1 GROUP BY col1, col2
这将返回一个表,如下所示
col 1 | col2 | max(col3) | min(col4)
------ | ------ | --------- | ------
10 | 0.5 | 20 | -5
10 | 0.9 | 30 | -2
我需要的是每个max和min以及每个实体的数据集(整行)。我可以使用类似
的查询以编程方式执行此操作SELECT * FROM table1 WHERE col1 = 10 AND (col2 = 0.5 OR col2 = 0.9) AND ((col3 = 20 OR col4 = -5) OR (col3 = 30 OR col4 = -2 ))
返回4个数据集,
但是每次添加MAX或MIN或GROUP BY时,查询会变得更加丑陋(这是用户对程序的处理方式)。
让我试着用一句话解释一下:我正在寻找一种方法,将数据集显示给col1和col2的每个唯一值组合的每个最大值和最小值(不是col1,col2)。
有没有办法在一个查询中执行此操作?
如果您需要进一步的细节,请不要担心发表评论。
数据集
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
答案 0 :(得分:0)
如果您知道两个列值:这将是col3最大值时的数据集,而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)";
答案 1 :(得分:0)
这应该这样做:
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