SQL分组查询取第一条数据

SQL分组查询取第一条数据,第1张

我们在查询数据时,经常会使用distinct去重,但使用distinct只能去除所有查询列都相同的记录,如果所查询列中有一个字段值不同,distinct是无法去重的。但我们还想要实现这样的效果,这时我们可以用partition by。

1.例如,我们新建一张学生成绩表。

2.插入一些测试数据。

3.例如我们需要查询每个科目不同的分数,这时候可以用到distinct:

4.但是我们把需求再加一点,需要查询每个科目排名第一的学生信息,这时候就需要用到partition by:

PS:MySQL5.6不支持partition by

此时我们发现,并且第一的小明同学的英语成绩没有被查询出来,接着优化:

工具/材料:Management Studio。

1、首先在桌面上,点击“Management Studio”图标。

2、然后在该界面中,点击“新建查询”按钮。

3、之后在该界面中,查询第一行的SQL语句“select top 1 * from myAudit”。

4、接着在该界面中,点击“执行”按钮。

5、最后在该界面中,结果窗口里显示数据表的第一行数据。

代码如下:

select * from tbl_DPImg where ID in (select min(ID) from tbl_DPImg group by DPID)

处理后结果为:

查找表中多余的重复记录,重复记录是根据单个字段(teamId)来判断

select * from team where teamId in (select teamId from team group by teamId having count(teamId) >1) 

删除表中多余的重复记录,重复记录是根据单个字段(teamId)来判断,只留有rowid最小的记录 

delete from team where

teamName in(select teamName from team group by teamName having count(teamName) >1) 

and teamId not in (select min(teamId) from team group by teamName having count(teamName)>1)

扩展资料

数据记录筛选:

sql="select * from 数据表 where字段名=字段值 order by字段名[desc]"(按某个字段值降序排列。默认升序ASC)

sql="select * from 数据表 where字段名like '%字段值%' order by 字段名 [desc]"

sql="select top 10 * from 数据表 where字段名=字段值 order by 字段名 [desc]"

sql="select top 10 * from 数据表 order by 字段名 [desc]"

sql="select * from 数据表 where字段名in ('值1','值2','值3')"

sql="select * from 数据表 where字段名between 值1 and 值2"

参考资料来源:百度百科:SQL语句大全


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9946272.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存