1,找出每科成绩最好的同学:
create table test
(
id int not null primary key auto_increment,
tname char(20),
course char(20),
score int
)
| 1 | 张三 | 语文 | 80 |
| 2 | 李四 | 语文 | 90 |
| 3 | 王五 | 语文 | 93 |
| 4 | 张三 | 数学 | 77 |
| 5 | 李四 | 数学 | 68 |
| 6 | 王五 | 数学 | 99 |
| 7 | 张三 | 英语 | 90 |
| 8 | 李四 | 英语 | 50 |
| 9 | 王五 | 英语 | 89 |
select a.tname, a.course, a.score from test a
where a.score = (select max(b.score) from test b where a.course = b.course);
2,如果取每科前两名的同学:
select a.tname, a.course, a.score
from test1 a left join test1 b on
a.course = b.course and a.score < b.score
group by a.tname, a.course, a.score
having count(b.id) < 2
order by a.course, a.score desc;
3,求数量最多的课程,即该列的众数:
select a.course, count(a.course) as nums
from test1 a
group by a.course
order by nums desc
limit 1;
4,sql实现连乘,利用先log,然后相加,然后exp的方式实现,即利用对数函数可以把加法变成乘法的特点:
select exp(sum(log(risk))) as result, username from tmp_result group by username;