SQL查询一个表中类别字段中最大值对应的值
2017-01-22 15:51
477 查看
SQL查询一个表中类别字段中最大值对应的值
一、SQL查询一个表中类别字段中最大值对应的值(对一张表的操作):
问题:根据教师id查询checkOutAutoID最大的一条记录里的上期余额?
探索:
1.group by方法:
首先查询表中相同teacherID对应的checkOutAutoID的最大值:
select MAX(checkOutAutoID) from T_CheckOut group by teacherID order by teacherID
然后根据查出的最大值(假设查出的是3),查出对应的remainCash:
SELECT remainCash FROM T_CheckOut WHERE checkOutAutoID=3
合并SQL:
SELECT remainCash FROM T_CheckOut WHERE checkOutAutoID=(select MAX(checkOutAutoID) from T_CheckOut group by teacherID order by teacherID)
结果报错:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/31/79aa68d23b429c4ce4e59ff28c8d628d)
解决方法:
在子查询中加入top 1就可以了:
SELECT top 1 remainCash FROM T_CheckOut WHERE checkOutAutoID=(select top 1 MAX(checkOutAutoID) from T_CheckOut group by teacherID order by teacherID)
库里两条数据,运行时间0.035s。
2.嵌套:
select remainCash,teacherID,checkOutAutoID from T_CheckOut as a
where checkOutAutoID=(select max(b.checkOutAutoID)
from T_CheckOut as b
where a.teacherID = b.teacherID
)
库里两条数据,运行时间0.146s,查询效率相对以上方法较低,满了5倍。
那问题来了,我们的checkOutAutoID是唯一的,如果我们换一种想法,假设checkOutAutoID不唯一,可能我们查出的checkOutAutoID相同的记录有很多条,但是我们只要其中一条该怎么办呢?只需做一点小小的修改就OK:
select * from
(select remainCash,teacherID,checkOutAutoID from T_CheckOut as a
where checkOutAutoID=(select max(b.checkOutAutoID)
from T_CheckOut as b
where a.teacherID = b.teacherID
)
)as a
group by checkOutAutoID
二、根据卡表中的卡号,插入学生表一条记录(卡表与学生表存在外键关联):
insert into T_Student(cardAutoID,stuID,stuName,sex)select cardAutoID,@stuID,@stuName,@sexfrom
T_Card where cardID=@cardID
总结:
group by方法相对嵌套来说,查询效率高,语句简单,不易出错,所以还是建议使用第一种方法。
感谢您的阅读!
一、SQL查询一个表中类别字段中最大值对应的值(对一张表的操作):
问题:根据教师id查询checkOutAutoID最大的一条记录里的上期余额?
探索:
1.group by方法:
首先查询表中相同teacherID对应的checkOutAutoID的最大值:
select MAX(checkOutAutoID) from T_CheckOut group by teacherID order by teacherID
然后根据查出的最大值(假设查出的是3),查出对应的remainCash:
SELECT remainCash FROM T_CheckOut WHERE checkOutAutoID=3
合并SQL:
SELECT remainCash FROM T_CheckOut WHERE checkOutAutoID=(select MAX(checkOutAutoID) from T_CheckOut group by teacherID order by teacherID)
结果报错:
解决方法:
在子查询中加入top 1就可以了:
SELECT top 1 remainCash FROM T_CheckOut WHERE checkOutAutoID=(select top 1 MAX(checkOutAutoID) from T_CheckOut group by teacherID order by teacherID)
库里两条数据,运行时间0.035s。
2.嵌套:
select remainCash,teacherID,checkOutAutoID from T_CheckOut as a
where checkOutAutoID=(select max(b.checkOutAutoID)
from T_CheckOut as b
where a.teacherID = b.teacherID
)
库里两条数据,运行时间0.146s,查询效率相对以上方法较低,满了5倍。
那问题来了,我们的checkOutAutoID是唯一的,如果我们换一种想法,假设checkOutAutoID不唯一,可能我们查出的checkOutAutoID相同的记录有很多条,但是我们只要其中一条该怎么办呢?只需做一点小小的修改就OK:
select * from
(select remainCash,teacherID,checkOutAutoID from T_CheckOut as a
where checkOutAutoID=(select max(b.checkOutAutoID)
from T_CheckOut as b
where a.teacherID = b.teacherID
)
)as a
group by checkOutAutoID
二、根据卡表中的卡号,插入学生表一条记录(卡表与学生表存在外键关联):
insert into T_Student(cardAutoID,stuID,stuName,sex)select cardAutoID,@stuID,@stuName,@sexfrom
T_Card where cardID=@cardID
总结:
group by方法相对嵌套来说,查询效率高,语句简单,不易出错,所以还是建议使用第一种方法。
感谢您的阅读!
相关文章推荐
- SQL查询一个表中类别字段中Max()最大值对应的记录
- SQL查询一个表中类别字段中Max()最大值对应的记录
- SQL查询一个表中类别字段中Max()最大值对应的记录
- SQL查询一个表中类别字段中Max()最大值对应的记录
- SQL查询一个表中类别字段中Max()最大值对应的记录
- MySQL查询:查询一个表中类别字段中Max()最大值对应的记录
- MySQL查询:查询一个表中类别字段中Max()最大值对应的记录
- MySQL查询:查询一个表中类别字段中Max()最大值对应的记录
- MySQL查询:查询一个表中类别字段中Max()最大值对应的记录
- sql查询语句 --------一个表中的字段对应另外一个表中的两个字段的查询语句
- sql 查询一个表信息 条件为该表一个字段大于对应(必须该表相对应的Id)另外一个表的总数
- 查询一个表中所有id字段在另一个表中对应值的SQL语句怎么写?
- 表A中一条记录的两个字段都对应于表B的同一个字段 如何查询?SQL, thinkphp[5]
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行
- Sql查询一个表中除了某个字段以外的所有字段的方法
- oracle 一个字段做为分组条件,另一个字段的最大值为查询条件
- SQL查询某一个表的字段和数据类型
- SQL 分组后获取其中一个字段最大值的整条记录
- ms sql server 查询一个表的字段属性和主键
- 通过sql语句查询出来的结果字段没有到对应实体类时的处理方法