【发布时间】:2017-11-09 04:06:40
【问题描述】:
我正在拼命搜索一个查询,它为我提供了以下查询的所有数据集:
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
我需要的是每个最大值和最小值以及每个实体的数据集(整行)。我可以使用类似
的查询以编程方式执行此操作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)的方法。
有没有办法在一个查询中做到这一点?
如果您需要更多详细信息,请不要害怕发表评论。
编辑 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
【问题讨论】:
-
请发布示例数据集和所需的输出。
-
做“groupwise max”很麻烦。查看我添加的标签。
-
@RickJames 将调查这些问题,感谢您的意见
标签: mysql sql mariadb greatest-n-per-group