mysql - 从 Mysql 的表中选择唯一的组合

标签 mysql

我的数据集具有以下格式;

Student_id Month Year Amount
1           Jan  2010  600
1           Feb  2010  391
1           Apr  2010  673
1           Jul  2010  564
5           Jan  2010  789
5           Mar  2011  298
5           Aug  2010  347
7           Jan  2010  654
7           Dec  2011  621
7           Apr  2010  450
7           Nov  2011  980

...等等。

我希望我的输出对于每个唯一的 id-月-年组合具有最大金额。即,

Student_id Month Year Amount
1          Apr   2010 673
5          Jan   2010 789
7          Nov   2011 980

...像这样。

如何使用 SQL 获取输出?我试过了

select distinct * , MAX(Amount) from student_details; 

&

SELECT *, MAX(Amount)
FROM student_details
WHERE Amount IN
(
    FROM student_details
    GROUP BY Student_ID, Year, Month
);

但输出不符合预期。

请提出帮助建议。提前致谢。

最佳答案

在 MySQL 中:

SELECT t0.*
FROM student_details AS t0
LEFT JOIN student_details AS t1 ON t0.Student_id=t1.Student_id t1.Amount>t0.Amount
WHERE t1.Student_id IS NULL;

在 SQL 服务器中:

SELECT T.Student_id,T.Month,T.Year,T.Amount
FROM 
(
   SELECT *,row_number() over (PARTITION BY Student_ID ORDER BY Amount DESC) as RN
   FROM student_details
)T
WHERE T.RN=1

关于mysql - 从 Mysql 的表中选择唯一的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44675105/

相关文章:

mysql - 如何使用 group by、where 和 order by 子句在大表(>38.700.000 行)上定义索引

mysql - Shell 脚本选择记录,额外提供一行作为列名

java - JPA Eclipselink 插入表时出错

php - 如何将数据库表添加到自定义表单并在网页中显示结果

mysql - 在 MySQL 中的最后一个 INSERT 上执行 SELECT 或将数据插入到 2 个表中,这些表具有由 MySQL 自动生成的公共(public)列

php - 是否有将字符串转换为小写的 MySQL 命令?

python - 只有部分长字符串用 pandas write_frame 写入数据库

mysql - 错误 #1193 MySql,插入触发器

mysql - 查询以匹配一列中的不同值,而该列中的不同值在单独的列中具有相同的值

mySQL DISTINCT 和 JOINS