亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

sql server 取每一個學生多個科目當中分數最高的記錄

標簽:
SQL Server

同表当中,取每一个学生多个科目当中分数最高的记录(name,sub,scores)

WITH tmp AS(SELECT stuid,sub,scores,ROW_NUMBER() OVER (PARTITION BY stuid ORDER BY scores DESC) as num 
  FROM score
  )SELECT * FROM tmp WHERE num<=1

同表当中,取每一个科目最高的记录(name,sub,scores):

WITH tmp AS(SELECT stuid,sub,scores,ROW_NUMBER() OVER (PARTITION BY sub ORDER BY scores DESC) as num 
  FROM score
  )SELECT * FROM tmp WHERE num<=1

两表当中,取每一个学生多个科目当中分数最高的记录(id,name,sub,scores):

SELECT a.id,a.name,b.sub,b.scores FROM students AS a JOIN score AS b ON a.id=b.stuid JOIN score AS c ON b.stuid=c.stuid 
GROUP BY a.id,a.name,b.name,b.scores HAVING b.scores=MAX(c.scores) 
----------------------------------------------------------------------------
或者
WITH tmp AS(SELECT a.id,a.name,b.sub AS sub,b.scores,ROW_NUMBER() OVER (PARTITION BY b.stuid ORDER BY scores DESC) as num 
  FROM students AS a JOIN score AS b ON a.id=b.stuid
  )SELECT * FROM tmp WHERE num<=1

两表当中,取每一个科目最高的记录(id,name,sub,scores):

SELECT a.id,a.name,b.sub,b.scores FROM students AS a JOIN score AS b ON a.id=b.stuid JOIN score AS c ON b.sub=c.sub
GROUP BY a.id,a.name,b.sub,b.scores HAVING b.scores=MAX(c.scores) 
----------------------------------------------------------------------------
或者
WITH tmp AS(SELECT a.id,a.name,b.sub AS sub,b.scores,ROW_NUMBER() OVER (PARTITION BY b.sub ORDER BY scores DESC) as num 
  FROM students AS a JOIN score AS b ON a.id=b.stuid
  )SELECT * FROM tmp WHERE num<=1

mysql:
两表当中,取每一个科目最高的记录(id,name,sub,scores):

SELECT d.name,c.stuid,c.scores,c.sub,c.num  FROM (SELECT stuid,scores,sub,(SELECT COUNT(*) FROM score AS b WHERE a.stuid=b.stuid AND a.scores<=b.scores) AS num 
FROM score AS a GROUP BY stuid,scores,sub) AS c JOIN students AS d ON c.stuid=d.id WHERE c.num<=1

mysql:
两表当中,取每一个学生多个科目当中分数最高的记录(id,name,sub,scores):
(这条语句的问题是:当同一个科目的最高分有两个或两个以上时,数据就会被过滤掉,不知道怎么解决……)

SELECT d.name,c.stuid,c.scores,c.sub,c.num  FROM (SELECT stuid,scores,sub,(SELECT COUNT(*) FROM score AS b WHERE a.sub=b.sub AND a.scores<=b.scores) AS num 
FROM score AS a GROUP BY stuid,scores,sub) AS c JOIN students AS d ON c.stuid=d.id WHERE c.num<=1
點擊查看更多內容
2人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
數據庫工程師
手記
粉絲
16
獲贊與收藏
1027

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消