mysql如何获得某字段的最大值所在行?

  算法/数据结构/数据库 mysql    浏览次数:4096        分享
0

假如有这么一个表

+------+-------+--------------------------------------+

| id | val   | field1 | field2 |                              |

+------+-------+--------------------------------------+

| 1 | 1 | ... | ... |

| 2 | 1 | ... | ... |

| 1 | 2 | ... | ... |

| 1 | 3 | ... | ... |

+------+-------+--------------------------------------+

我想得到按照id进行groupby之后val最大的行,结果为

+------+-------+--------------------------------------+

| id | val | field1 | field2 | |

+------+-------+--------------------------------------+

| 2 | 1 | ... | ... |

| 1 | 3 | ... | ... |

+------+-------+--------------------------------------+

这该如何操作?

下面的操作只能得到val的最大值,忽视了其他的字段,我需要整行的信息

SELECT id, MAX(value) FROM my_table GROUP BY id

谢谢!

 

ggg818   2019-12-11 23:39



   1个回答 
3

两种方法

第一种方法比较直接,先groupby挑出最大的,然后再回到原来的表里找到最大值所在的行

SELECT a.*
FROM YourTable a
INNER JOIN (
    SELECT id, MAX(val) rev
    FROM YourTable
    GROUP BY id
) b ON a.id = b.id AND a.val = b.val

第二种方法比较机智,让自己和自己做join,但是要求左边的表中val的数值小于右表中的val,否则就为空。显然空着行就是val取最大值的行

SELECT a.*
FROM YourTable a
LEFT OUTER JOIN YourTable b
    ON a.id = b.id AND a.val < b.val
WHERE b.id IS NULL;


SofaSofa数据科学社区DS面试题库 DS面经

LiShanfei   2019-12-12 16:37

厉害厉害,谢谢 - ggg818   2019-12-16 18:54


  相关讨论

如何在mysql中获取当前日期?

NoSql数据库是什么样的?

sql里where和having的区别是什么?

mysql里ORDER BY的默认排序是什么?

SQL里UNION和UNION ALL的区别是什么?

sql里的table和view有什么区别?

mysql查询表最后更新时间?

mysql怎么对文本字段增加suffixes?

sql里cross join有什么作用?

mysql怎么对每个group只选2行?

  随便看看

除了PCA,还有什么降维的方法?

逻辑回归的损失函数是怎么来的

K-means怎么选K?

xgboost怎么调参?

huber loss是什么?什么时候用?