1.将结果进行排序后,对排序后的数据进行排名
select
t.score Score,
CAST((case when @rowtotal = t.score then @rownum:=@rownum + 0
when @rowtotal := t.score then @rownum:=@rownum + 1
when @rowtotal = 0 then @rownum:=@rownum+1 end) AS SIGNED) as `Rank` from
(select score from scores order by score desc) t,
(select @rownum:=0,@rowtotal:=null)c
其中case when的语句解释如下:
- 第一个when是判断当前的score是否等于当前赋值的@rowtotal,如果是,则排名不变(排名并列)
- 一开始的时候,第一个when是不会执行的,因为此时@rowtotal为null,而到了第二个when的时候@rowtotal := score将score赋值给了@rowtotal,只要score>0,那么改判断都为true,就将@rownum行号+1。
- 第三个when只有当第二个when将@rowtotal赋值为0的时候,才会执行。
2.删除语句联表查询
delete from table1 t1,table2 t2 where t1.id > t2.id and t1.email = t2.email;
该语句时错误的,执行后会报错,应该写成以下的方式
delete t1 from table1 t1,table2 t2 where t1.id > t2.id and t1.email = t2.email;
两张表关联查询的话,就需要制定好要删除哪张表。
后续有其他的SQL语句,再来继续添加