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

  算法/数据结构/数据库 sql    浏览次数:170        分享
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个回答 
2

两种方法

第一种方法比较直接,先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


  相关主题

sql里nullif怎么用?   1回答

mysql里获取中位数和四分位数的函数是什么?   2回答

mysql数据库中怎么从一个表里随机抽取k行?   2回答

hive里的LEFT SEMI JOIN是什么JOIN?   1回答

sql中limit m, n是什么意思?   2回答

NoSql数据库是什么样的?   1回答

sql里cross join有什么作用?   1回答

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

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

mysql里的锁是什么意思?   1回答

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

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



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!