1.MySQL
1) 分组排序
背景:查找出每个班级分数前3名的同学和分数
SQL:
SELECT
classid, name, score
FROM
scores a
WHERE
3 > (
SELECT
count(*)
FROM
scores b
WHERE
a.classid = b.classid
AND b.score > a.score
)
ORDER BY
a.classid,
a.score DESC
结果:
原理:
其实这是用的表的自连接,把一张表分别取别名,作为两张表a,b,然后去比较。如果a表和b表的classid相同,但是b.score > a.score 的数量为0时,说明
a表的score是最大的,b.score > a.score 的数量为1时,说明a.score是第二大的,如果取前3条,则 3 > (select count(*) from b where b.classid=a.classid and b.score > a.score)。
2)对查询结果加行号
SQL
select (@rowNo := @rowNo+1) roNo, a.* from scores a , (select @rowNo :=0) b