MySQL中有時(shí)需要根據(jù)多個(gè)字段進(jìn)行排序排名,這時(shí)可以使用類似于以下的語句:
SELECT id, name, age, score, (SELECT COUNT(*) FROM students WHERE (score >s.score OR (score = s.score AND (age< s.age OR (age = s.age AND name< s.name))))) AS rank FROM students s ORDER BY rank ASC;
其中,rank字段就是根據(jù)score、age和name計(jì)算出來的排名。
這個(gè)語句中的子查詢會(huì)在外層查詢的每一行執(zhí)行,計(jì)算出score、age和name均小于當(dāng)前行的數(shù)量,再加上score相同、age小于當(dāng)前行的數(shù)量,最后再加上score與age均相同、name小于當(dāng)前行的數(shù)量。
最后,將得出的rank字段按照升序排序,即可得到按照多個(gè)字段排名排列的結(jié)果。