mysql - 为组选择最小列总和

标签 mysql sql database select database-design

我很难找到解决此问题的简单方法。

您可以假设 UNIQUE KEY (A, B, C, D, E) .

Data Sample

我正在尝试 SELECT上表中的所有行,这样对于 C, D, E 的每个唯一组, 我想要 A, B这样 A + B <=所有其他 A + B该特定组的组合 C, D, E .

因此执行 SELECT以上数据应该产生(如果是平局,选择第一个):

enter image description here

如果我要 GROUP BY C, D, E , 列 A, B是任意选择的(技术上首先 A, B 由数据库内部遇到)。

如果这是关系代数,我会将关系与其自身交叉连接,选择哪里 C, D, E在“两个”关系中都是平等的,其中 A + B来自一份关系的副本大于A + B另一个副本,然后从原始关系中减去结果。

不过我认为,在 MySQL 中有一种更简单的方法可以做到这一点.该表可能有数千组 C, D, E , 每组包含 5 到 10 A, B .我不相信 CROSS JOIN会非常有效。

最佳答案

这样做的一种方法是为 cde 的每个组合选择最小值,然后将其与查询表:

SELECT mytable.*
FROM   mytable t
JOIN   (SELECT   c, d, e, MIN(a + b) AS min_ab
        FROM     mytable
        GROUP BY c, d, e) s ON t.c = s.c AND
                               t.d = s.d AND
                               t.e = s.e AND
                               t.a + t.b = s.min_ab

关于mysql - 为组选择最小列总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34421683/

相关文章:

sql - Postgres : Insert values in two tables simultaneously from csv

sql - 解释这个简短的 SQL 查询

SQL : How to know if a set of values exist in database?

python - 通过添加某些列的值从 Excel 行中删除重复项

mysql - 同时进行 SELECT 和 UPDATE - 锁定以防止并发问题

mysql - 使用聚合函数的结果更新 mySQL 表

mysql - 如何使用子查询优化更新语句?

缺少非空字段的 MySQL 插入查询

php - 如何在重复的列值上更新 mySQL 键

java - 当没有可用连接时必须设置 hibernate.dialect