如何根据其他列查找一列的不同

时间:2015-11-18 10:11:35

标签: mysql sql r groupwise-maximum

我有一个如下数据框

for

我必须为每个col1 col2 col3 A Z 10 A Y 8 A Z 15 B X 11 B Z 7 C Y 10 D Z 11 D Y 14 D L 16 distinct col1 col2

中的哪一个max(col3)选择

输出数据框应该如下,

col1    col2    col3
A       Z       15
B       X       11
C       Y       10
D       L       16

如何在RSQL

中执行此操作

提前致谢

3 个答案:

答案 0 :(得分:4)

我们可以使用data.table。我们转换了' data.frame'到' data.table' (setDT(df1)),按' col1'分组,我们根据' col3' .SD)进行子集化。 p>

library(data.table)
setDT(df1)[, .SD[which.max(col3)], col1]
#     col1 col2 col3
#1:    A    Z   15
#2:    B    X   11
#3:    C    Y   10
#4:    D    L   16

或者我们可以在使用' col1'进行分组后使用top_n中的dplyr

library(dplyr)
df1 %>%
      group_by(col1) %>%
      top_n(1)

答案 1 :(得分:3)

SQL回答:

如果没有其他行具有相同的col1值且col3值更高,则使用NOT EXISTS返回一行。

select *
from tablename t1
where not exists (select 1 from tablename t2
                  where t2.col1 = t1.col1
                    and t2.col3 > t1.col3)

如果存在max(c3)平局,则返回col1的两行。

答案 2 :(得分:3)

在MySQL中做的另一种方式。

以下是SQLFiddle Demo

输出:=> enter image description here

SELECT T1.*
FROM
table_name T1
INNER JOIN 
(SELECT col1,MAX(col3) AS Max_col3 FROM table_name GROUP BY col1) T2 
            ON T1.`col1` = T2.`col1` and T2.`Max_col3`=t1.`col3`

希望这有帮助。