重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
上面那条答案应该是可以的啊,可能是看起来复杂了点吧,我自己试过是没问题的:
创新互联专注于东城网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供东城营销型网站建设,东城网站制作、东城网页设计、东城网站官网定制、小程序设计服务,打造东城网络公司原创品牌,更为您提供东城网站排名全网营销落地服务。
SELECT t1.sno,t1.cno,Score
FROM SC t1
WHERE EXISTS
(SELECT COUNT(1)
FROM SC
WHERE t1.cno= cno AND t1.scorescore
HAVING COUNT(1)3)
ORDER BY t1.cno,score DESC
另外还有一种类似的写法:
SELECT t1.sno,t1.cno,Score
FROM SC t1
WHERE
(SELECT COUNT(cno)
FROM SC
WHERE t1.cno= cno AND t1.scorescore)3
ORDER BY t1.cno,score DESC
用mysql查询出字段中的前几个字可以用left()方法,
如果要查一个字段的前50个字符,sql语句举例:
select left(table_column,50) from table_name;
left(table_column,50) 表示截取table_column左边的50个字符
扩展资料
sql中截取字符串的相关函数介绍:
1、left(name,4)截取左边的4个字符
列:SELECT LEFT(201809,4) 年
结果:2018
2、right(name,2)截取右边的2个字符
SELECT RIGHT(201809,2) 月份
结果:09
3、SUBSTRING(name,3) 截取name这个字段 从第三个字符开始,之后的所有个字符
SELECT SUBSTRING('1234567',3)
结果:34567
4、SUBSTRING(name, -4) 截取name这个字段的第 4 个字符位置(倒数)开始取,直到结束
SELECT SUBSTRING('1234567',-4)
结果:4567
首先,select count(1)表示查询出表中符合条件的行数;
r2.cno=r1.cno and r2.score = r1.score表示查询条件;
select count(1) from sc r2 where r2.cno=r1.cno and r2.score = r1.score总体的意思就是从表r2中查询出满足r2.cno=r1.cno and r2.score = r1.score条件的行数;
结合完整的sql语句来看,这个查询出的行数要=2,所以"行数=2"是作为前一个查询语句的查询条件的。
这样这个语句简单点理解就是:从r1表查询sno,cno,score这三列,查询条件是"行数=2"。
说的比较复杂,不知道你懂了没
CREATE PROCEDURE GetScRank()
BEGIN
DECLARE SigDone INT DEFAULT 0;
DECLARE Cno_ BIGINT;
DECLARE Cur1 CURSOR FOR SELECT DISTINCT Cno FROM Score;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET SigDone = 1;
OPEN Cur1;
TRUNCATE scResult;
FETCH Cur1 INTO Cno_;
WHILE NOT SigDone DO
INSERT INTO scResult (Sno,Cno,Sc) (SELECT DISTINCT Sno,Cno,Sc FROM Score WHERE Cno =Cno_ ORDER BY Sc DESC LIMIT 10);
COMMIT;
FETCH Cur1 INTO Cno_;
END WHILE;
CLOSE Cur1;
END
用游标效率应该还行吧.