多表关联查询问题求助

在细雨中呐喊 2018-07-05 07:07:45
各位好:
我刚刚开始接触数据库,前几天面试的时候碰到这样一个问题:一张表FIRST,表结构和数据如下图:

(当时考题中没有ID这一栏,是我不知道怎么定位是第几行数据而自己加的)
题目要求是:将记录按照type的值分类,将每类中CODE的ASCⅡ的值第二大的记录查询出来。提示是表关联和const指令。
我当时想了很久,使用
select const(*),type from first group by type;
能得到每类的记录数,通过表达式也能定位到第二大的记录应该是哪行。
我的问题是:
1。如何查询一张表具体到第几行的记录
2。用什么指令能将我查询出的结果作为临时表和原表关联起来。
3。原题中CODE的值是数字,比较ASCⅡ码比较简单,如果还包含字母,这个比较怎么在SQL语句中实现。
希望能得到帮助,谢谢各位。
...全文
1098 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_wangyr 2018-09-12
  • 打赏
  • 举报
回复
先查询出code acsii的最大值 ,再找出所有比这个最大值小的所有code值后进行分组 再取这个组里的最大值 就是第二大的了
select max(code) as code,type from first
where ascii(code) <
(select max(ascii(code)) from bb)
group by type
onepersons 2018-09-09
  • 打赏
  • 举报
回复

# 查找每一条记录中有相同type的所有记录,统计code大于本条记录的数量,如果只有一条记录的code大于本条记录,则本条记录的code
# 就是第二大的,并用 exists 将本条记录筛选出来。

select *
from first as a
where exists(select count(*) as num
from first
where a.type = type and a.code < code
having num = 1);
  • 打赏
  • 举报
回复
SELECT Max(a.code),a.type FROM first AS a Left Join first AS b ON a.type = b.type AND a.code< b.code WHERE b.code IS NOT NULL GROUP BY a.type
木子0204 2018-08-31
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
select * from (select a.*,row_num()over(partition by type order by ascii(code) as rn from t1 a) b where b.rn2

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧