上面那條答案應該是可以的啊,可能是看起來復雜了點吧,我自己試過是沒問題的:
創(chuàng)新互聯(lián)專注于東城網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供東城營銷型網(wǎng)站建設,東城網(wǎng)站制作、東城網(wǎng)頁設計、東城網(wǎng)站官網(wǎng)定制、小程序設計服務,打造東城網(wǎng)絡公司原創(chuàng)品牌,更為您提供東城網(wǎng)站排名全網(wǎng)營銷落地服務。
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中截取字符串的相關(guān)函數(shù)介紹:
1、left(name,4)截取左邊的4個字符
列:SELECT LEFT(201809,4) 年
結(jié)果:2018
2、right(name,2)截取右邊的2個字符
SELECT RIGHT(201809,2) 月份
結(jié)果:09
3、SUBSTRING(name,3) 截取name這個字段 從第三個字符開始,之后的所有個字符
SELECT SUBSTRING('1234567',3)
結(jié)果:34567
4、SUBSTRING(name, -4) 截取name這個字段的第 4 個字符位置(倒數(shù))開始取,直到結(jié)束
SELECT SUBSTRING('1234567',-4)
結(jié)果:4567
首先,select count(1)表示查詢出表中符合條件的行數(shù);
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條件的行數(shù);
結(jié)合完整的sql語句來看,這個查詢出的行數(shù)要=2,所以"行數(shù)=2"是作為前一個查詢語句的查詢條件的。
這樣這個語句簡單點理解就是:從r1表查詢sno,cno,score這三列,查詢條件是"行數(shù)=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
用游標效率應該還行吧.