SQL 中的ORDER BY

本文探讨了MySQL中IN与LIMIT结合使用的限制及解决方案,包括通过额外嵌套查询和使用表表达式的方法来规避限制,同时展示了如何不使用LIMIT获取指定排名记录的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL中 IN 不能和LIMIT一起用

还是上jie那个学生表,我现在想查询cid为02 的前三名学生的总成绩

SELECT SUM(s_score)
  FROM score
 WHERE s_score IN (SELECT s_score
FROM score
 WHERE c_id = '02'
 ORDER BY s_score DESC
 LIMIT 3);

this version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

解决方案1:再嵌套一次

 

SELECT SUM(s_score)
  FROM score
 WHERE s_score IN (SELECT s_score FROM(
				SELECT s_score
				 FROM score
				WHERE c_id = '02'
				ORDER BY s_score DESC
				LIMIT 3) AS t1);

解决方案2:把它放在from里面不涉及in

SELECT SUM(t1.s_score)
  FROM (
SELECT s_score
FROM score
 WHERE c_id = '02'
 ORDER BY s_score DESC
 LIMIT 3) t1;

当然我也可以不用limit

-- cid的为02的前三名
SELECT SUM(t1.s_score)
  FROM (
SELECT s1.s_id,s1.s_score
  FROM Score s1
 WHERE s1.c_id = '02'
   AND (SELECT COUNT(*) FROM Score s2
		 WHERE s1.c_id = s2.c_id
           AND s2.s_score > s1.s_score) < 3) AS t1;

我也不知道为什么以前说表表达式不能用order by但这里确实可以了

等待大神回复 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值