sql >> Databasteknik >  >> RDS >> Mysql

fråga efter användarens rankning i en-till-många-tabeller

SELECT u.id,total_score,
 ( SELECT COUNT(*) FROM
    (SELECT u1.id, (IFNULL(u1.freebee,0)+ IFNULL(SUM(score),0)) as total_score
     FROM users u1
     LEFT JOIN games g ON (g.userId = u1.id)
     GROUP BY u1.id
    )x1
   WHERE x1.total_score > x.total_score
 )+1 as rank,

( SELECT COUNT(DISTINCT total_score) FROM
    (SELECT u1.id, (IFNULL(u1.freebee,0)+ IFNULL(SUM(score),0)) as total_score
     FROM users u1
     LEFT JOIN games g ON (g.userId_Id = u1.id)
     GROUP BY u1.id
    )x1
   WHERE x1.total_score > x.total_score
 )+1 as dns_rank

 FROM users u

 LEFT JOIN
  ( SELECT u1.id, (IFNULL(u1.freebee,0)+ IFNULL(SUM(score),0)) as total_score
    FROM users u1
    LEFT JOIN games g ON (g.userId = u1.id)
    GROUP BY u1.id
  )x ON (x.id = u.id)

rank - (normal rang - t.ex. - 1,2,2,4,5), dns_rank - tät rang (1,2,2,3,4). Kolumn total_score - bara för att felsöka...



  1. Tabelluppdatering på PK och ett annat fält i MySQL är sporadiskt långsam

  2. Hur inkluderar jag jar-filer i en lagrad Java-procedur i Oracle?

  3. mySQL - uppdatera flera kolumner med ett urval som returnerar flera rader

  4. Returnerar individuella nollvärden med postgres tablefunc crosstab()