连接之后有重合列的表格不能作为子查询

题目背景:找出数学成绩排名前五的学生姓名

select *,
          rank() over(partition by sc.c_id order by sc.scores desc) as ranking
          from test.score as sc inner join test.course as c on sc.c_id=c.c_id and c.c_name="数学"

上面代码执行正常没问题,可做为子查询,下面的代码执行就报错

 select  a.s_id  from
         (select *,
          rank() over(partition by sc.c_id order by sc.scores desc) as ranking
          from test.score as sc inner join test.course as c on sc.c_id=c.c_id and c.c_name="数学")a
where ranking<6

报错内容如下:
15:37:01 select a.s_id from (select *, rank() over(partition by sc.c_id order by sc.scores desc) as ranking from test.score as sc inner join test.course as c on sc.c_id=c.c_id and c.c_name=“数学”)a where ranking<6 Error Code: 1060. Duplicate column name ‘c_id’ 0.000 sec

后来我把 * 改为有限的几个字段,代码如下,执行ok:

select s_name from test.student
where s_id in (
      select  a.s_id
      from (
          select  sc.s_id,sc.c_id,c.c_name,
          rank() over(partition by sc.c_id order by sc.scores desc) as ranking
          from test.score as sc inner join test.course as c on sc.c_id=c.c_id and c.c_name="数学"
      ) a
      where ranking<6
      )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值