mysql - 比较不同列时获得最低值

标签 mysql sql join subquery min

我正在尝试比较表中的数据并输出每种类型的最小值。我知道 SQL 中有一个 MIN() 函数,但它只会获得总体的最低值,这不是我想要的。

我想获取整行的数据,其Column1中的值是foreach类型中最小的。

表格如下所示:

Type        Column1         Column2
-------     --------        ---------
A           1               !!!
A           2               @@@
B           3               ###
B           4               $$$
C           5               %%%
C           6               ^^^

当我使用SELECT MIN(Value)时,我得到的结果如下所示:

Type        Column1         Column2
-------     --------        ---------
A           1               !!!

我使用了Linger建议的GROUP BY方法,但结果仍然不太符合我的要求:

Type        Column1         Column2
-------     --------        ---------
A           1               @@@
B           3               $$$
C           5               ^^^

但是,期望的结果应该是:

Type        Column1         Column2
-------     --------        ---------
A           1               !!!
B           3               ###
C           5               %%%

我将如何编写 SQL 查询来完成这项工作?提前致谢。

最佳答案

这是一个简单的查询,只需使用 GROUP BY 子句即可执行:

SELECT MTM.* FROM 
(
    SELECT MTS.Type, MIN(MTS.Values) AS SmallestValue
    FROM  MyTable AS MTS
    GROUP BY MTS.Type
) AS MainQ
INNER JOIN MyTable AS MTM 
ON MTM.UniqueID = MainQ.UniqueID

在上面的示例中,我执行 MIN() GROUP BY 查询,然后将结果连接到同一个表以提取我需要的其余字段。您应该有一个唯一标识记录的字段。使用该字段代替上面的 UniqueID

关于mysql - 比较不同列时获得最低值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19644049/

相关文章:

java - JAVA中数据类型的转换

sql - 数据库-关系代数自然连接 2 个表包含 2 个相同的列名

mysql - 如何向此 MySQL 查询添加 LEFT JOIN?

c# - 在强类型列表上尝试 "where"时出错,错误 CS0103

mysql - 删除mysql中字段的最后一个字符

php - MySQL 使用 REGEXP 或 LIKE 来选择带有数据库别名的表名

mysql - 一个巨大的 SQL 语句还是许多小的 SQL 语句?

mysql - 使用 session ID 过滤数据

sql - 为什么我会导致聚集索引更新?

Android OrmLite 查询表A中的所有行而不是表B中的所有行