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

标签 mysql sql mariadb greatest-n-per-group

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

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

最佳答案

这应该可以做到:

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

关于mysql - 获取两列的每个唯一组合及其最大值和最小值的整个数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44418822/

相关文章:

mysql - 在 shell 脚本中将表计数设置为变量..?

PHP explode 检测用户名

sql - 我需要显示来自 json 列表的数据,每个键都作为单独的列

mysql - JpaRepository计数查询QuerySyntaxException实体未映射

mysql - 组连接等同于 pig ?

sql - 执行计划成本估算

java - Java/Scala内存统计数据库如何实现?

sql - 在 mySQL 的 WHERE IN 子句中保持排序

sql-server - 本地机器和云实例之间的单向 SymmetricDS 同步

mysql - 根据另一个表的 id 对一个基于结果的组中两个不同表的两列求和