sql语句中group by,聚合函数的使用。单行子查询返回多行怎么办?求解答!
selectmax(caption)fromtablegroupbyid这条sql帮我筛选出了77条(ID不同,并且ID相同中caption最大的数据)。我想查出这77条...
select max(caption) from table group by id这条sql帮我筛选出了77条(ID不同,并且ID相同中caption最大的数据)。我想查出这77条全部列。
select * from table where caption = (select max(caption) from table group by id)这样做会报错。distinct(id)一共有77条数据。请大神们指教! 展开
select * from table where caption = (select max(caption) from table group by id)这样做会报错。distinct(id)一共有77条数据。请大神们指教! 展开
5个回答
展开全部
两个办法。
(1)联合查询(oracle写法,如为其他数据库自行修改,这里只提供思路)
select table.id,table.XXXXX,table.XXXXX,table.caption,table.XXXXX from table,(select id,max(caption) max_cap from table group by id) b where table.id=b.id and table.caption=b.max_cap
(2)组合查询
select * from table where id||'_'||caption in (select id||'_'||max(caption) max_cap from table group by id)
加_是为了方防止出现特殊情况,比如id=1,caption=130 和id=11,caption=30的情况出现
不知道你是什么数据库,||是Oracle的连接符,用于连接字符串,其他数据库应该也有类似的东西,这个就自己掌握吧
(1)联合查询(oracle写法,如为其他数据库自行修改,这里只提供思路)
select table.id,table.XXXXX,table.XXXXX,table.caption,table.XXXXX from table,(select id,max(caption) max_cap from table group by id) b where table.id=b.id and table.caption=b.max_cap
(2)组合查询
select * from table where id||'_'||caption in (select id||'_'||max(caption) max_cap from table group by id)
加_是为了方防止出现特殊情况,比如id=1,caption=130 和id=11,caption=30的情况出现
不知道你是什么数据库,||是Oracle的连接符,用于连接字符串,其他数据库应该也有类似的东西,这个就自己掌握吧
展开全部
group by函数,允许查询出多列,你的sql语句中直接把多列都列出来就可以了
比如你的列有id,name,type,caption都想列出来,则
select id,name,type,max(caption) from table group by id
如果同一id下,你还想在想看某一类别下最大caption的数据,则group by 后面增加type就行了
select id,name,type,max(caption) from table group by id,type
比如你的列有id,name,type,caption都想列出来,则
select id,name,type,max(caption) from table group by id
如果同一id下,你还想在想看某一类别下最大caption的数据,则group by 后面增加type就行了
select id,name,type,max(caption) from table group by id,type
更多追问追答
追答
我晕,前面那个sql语句,是你这道题的答案,后面那个,我的意识是,如果你还需要,对其他列,继续进行分组,就会用到
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把 where后面的caption=(select***)改为 caption in 就好了
-----
试下这个看看select * from table where caption = (select max(caption) from table group by id)把这个改成 select a.* from table a,(select max(caption),id from table group by id) b where a.id=b.id
-----
试下这个看看select * from table where caption = (select max(caption) from table group by id)把这个改成 select a.* from table a,(select max(caption),id from table group by id) b where a.id=b.id
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select * from table where id = select id from(select id,max(caption) from table group by id)
这个意思么
这个意思么
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你没有select id ,为什么还要对id使用聚合函数
更多追问追答
追问
本来查(select max(caption) from MOS_SCSDATA_DETAIL_INFO group by id) 有77条数据,都展开的话有7200多条
追答
select id,max(caption)group by id有77条,加了字段变成select id,字段1,max(caption)group by id,字段1,结果会增加?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询