假如有这么一个表
+------+-------+--------------------------------------+
| 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
谢谢!
1个回答
两种方法
第一种方法比较直接,先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;
相关主题
hive里的LEFT SEMI JOIN是什么JOIN?
1回答
增量表、全量表分别是什么意思
1回答
sql怎么对数据表里的一列中文字符串按照拼音顺序排序?
1回答
mysql里的锁是什么意思?
1回答
NoSql数据库是什么样的?
1回答
我们谢绝在回答前讲“生动”的故事。
我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。
我们谢绝答非所问。
我们谢绝自己不会、硬要回答。
我们感激每一个用户在编写答案时的努力与付出!