您好,欢迎访问一九零五行业门户网

使用嵌套select子式 解决mysql不能叠加使用如max(sum())的问题

网上也有解决方案 有的有瑕疵 有的较复杂(mysql没有分析函数,可以使用变量实现) s
elect sumscorevalue,studentid,studentname from sc_studentb, ( select sum (scorevalue) as sumscorevalue,studentid from sc_score group by studentid order by sumsc
网上也有解决方案 有的有瑕疵 有的较复杂(mysql没有分析函数,可以使用变量实现)
select sumscorevalue,studentid,studentname from sc_student b, (select sum(scorevalue) as sumscorevalue, studentid from sc_score group by studentid order by sumscorevalue desc limit 1) as a where a.studentid=b.studentno //这样做 只能查询第一名只有一个的情况 很巧妙 mysql> select studentid,scorevalue from sc_score; +-----------+------------+ | studentid | scorevalue | +-----------+------------+ | 1 | 80 | | 1 | 85 | | 1 | 90 | | 2 | 75 | | 2 | 80 | | 2 | 84 | | 3 | 85 | | 3 | 85 | | 3 | 85 | +-----------+------------+ 9 rows in set (0.00 sec) mysql> select studentno,studentname from sc_student; +-----------+-------------+ | studentno | studentname | +-----------+-------------+ | 1 | aa | | 2 | bb | | 3 | cc | +-----------+-------------+ 3 rows in set (0.00 sec) mysql> select a.studentid, -> b.studentname, -> a.sumscorevalue -> from (select tmp.studentid, -> tmp.sumscorevalue, -> if(@groupid = tmp.sumscorevalue,@rank := 1,@rank := @rank + 1) as rank, -> @groupid := tmp.sumscorevalue -> from (select studentid, -> sum(scorevalue) as sumscorevalue -> from sc_score -> group by studentid -> order by scorevalue desc) tmp, -> (select @rank := 0,@groupid := '') m) a, -> sc_student b -> where a.studentid = b.studentno -> and a.rank = 1; +-----------+-------------+---------------+ | studentid | studentname | sumscorevalue | +-----------+-------------+---------------+ | 3 | cc | 255 | | 1 | aa | 255 | +-----------+-------------+---------------+ 2 rows in set (0.00 sec)
这是使用变量做的
自己重新做了
select s.id,s.stuid,stu.stuname, sumscore from score s left join student stu on s.stuid = stu.stuid left join (select s.id,s.stuid,stu.stuname,sum(s.score) as sumscore from score s left join student stu on s.stuid = stu.stuid where s.gradeid=4 and s.classid=1 and s.season=1 group by s.stuid) as t1 on t1.id=s.id where s.gradeid=4 and s.classid=1 and s.season=1 and sumscore in(select max(sumscore) from (select s.id,s.stuid,stu.stuname,sum(s.score) as sumscore from score s left join student stu on s.stuid = stu.stuid where s.gradeid=4 and s.classid=1 and s.season=1 group by s.stuid) as t2)
其它类似信息

推荐信息