Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何根据其他列查找一列的差异_Mysql_Sql_R_Groupwise Maximum - Fatal编程技术网

Mysql 如何根据其他列查找一列的差异

Mysql 如何根据其他列查找一列的差异,mysql,sql,r,groupwise-maximum,Mysql,Sql,R,Groupwise Maximum,我有一个如下所示的数据框 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 我必须为每个不同的col1选择col2中有max(col3) 输出数据帧应如下所示: col

我有一个如下所示的数据框

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
我必须为每个
不同的col1
选择
col2
中有
max(col3)

输出数据帧应如下所示:

col1    col2    col3
A       Z       15
B       X       11
C       Y       10
D       L       16
如何在
R
SQL


提前感谢

我们可以使用
数据表
。我们将“data.frame”转换为“data.table”(
setDT(df1)
),按“col1”分组,然后根据“col3”的最大值索引对data.table(
.SD
)进行子集

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”分组后,我们可以使用来自
dplyr
top\n

library(dplyr)
df1 %>%
      group_by(col1) %>%
      top_n(1)
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)tie,将返回col1的两行。

在MySQL中的另一种方法

这是你的电话号码

输出:=>


希望这能有所帮助。

非常感谢您的快速回复。:)不能像你回答的那样迅速接受你的回答。@ManojG谢谢你的反馈。我想大概需要10分钟左右。如果是平局,您在dplyr和data.table中的解决方案会有所不同。只是saying@akrun:我在一个数据框中应用了data.table解决方案,它由大约700万行组成,其中大约有470万行是唯一的col1,但我得到的输出是150万行。知道会出什么问题吗?@akrun:谢谢!我来试试:)你想如何处理领带?还有
library(data.table);unique(setorder(setDT(df),-col3),by=“col1”)
,尽管如前所述,您不清楚如何处理关系。对于每个组只返回sinlge行的dplyr方法(也适用于关系),请参阅@docendo discimus:没有关系,只要有一个关系出现,很好。@DavidArenburg:谢谢您的解决方案:)如果您从子查询中删除col2,您的答案将符合ANSI SQL并可移植@SubinCPoonamgode:谢谢你的解决方案,但如果是领带,它会给出多行na!是的,它将返回多行。有了领带怎么办?我们可以按照你的要求去做。@SubinCPoonamgode如果有领带,我需要其中的任何一行,不管它是哪一行。
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`