中午,小牛发来消息给一个数据表进行排名,然后根据分数生成排名字段,想了想,排序其实不难,关键是要生成新字段,觉得目前有两种思路可行:
表;student
id socre
1001 90
1002 92
1003 86
要生成结果:
mingci id socre
1 1002 92
2 1001 90
3 1003 86
一 先进行排序查询,然后对结果集进行从头到尾的遍历,根据行号作为排名字段的值,缺点是对于大型数据库,不适合实时排序,适合定期更新
二利用如下语句,生成临时表
create temporary table stu(mc int auto_increment primary key,id int,score int) select id,score from student order by score desc;
select * from stu
可以实现上面结果。
想起前几天接的一个小单,也有SQL的操作,头一次使用CASE语句(ACCESS里用IIF),再次体会了SQL的强大,一并写下来:
数据表resultlist
id sutdent_id bug_id item_id result
1 1 1 2 1
2 1 2 1 11
3 1 1 1 111
4 2 2 1 111
5 2 1 1 111
要根据student_id 和bug_id字段,来统计result字段(比如值为的111的个数),然后分别显示出来,
SQL语句:
SELECT student_id, bug_id, sum(iif(result=1,1,0)) AS no1,sum(iif(result=11,1,0)) AS no2,sum(iif(result=111,1,0)) AS no3
FROM resultlist
GROUP BY student_id, bug_id;
结果为:
student_id bug_id no1 no2 no3
1 1 0 0 1
1 2 1 1 0
2 1 0 0 1
2 2 0 0 1