sql >> Database >  >> RDS >> Mysql

opvragen voor de positie van de gebruiker in een-op-veel tabellen

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 - (normale rangorde - bijv. - 1,2,2,4,5), dns_rank - dichte rang (1,2,2,3,4). Kolom total_score - alleen voor debuggen...



  1. Slaapstand @OrderBy met klasse waarnaar wordt verwezen

  2. MySQL-query - voeg 3 tabellen samen, groepeer op één kolom en tel voor de andere 2

  3. DOE MEE met drie tafels

  4. Kan Oracle-opgeslagen proc niet raken met .Net EF(2.2) Core-repositorypatroon