sql >> Databáze >  >> RDS >> Mysql

dotazování na hodnocení uživatelů v tabulkách jedna k mnoha

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 - (normální hodnocení - např. - 1,2,2,4,5), dns_rank - hustá hodnost (1,2,2,3,4). Sloupec total_score - jen pro ladění...



  1. připojení java k Mysql pomocí Mysql-connector/j

  2. Vložit časové razítko s JdbcTemplate do databáze Oracle (ORA-01858)

  3. Najděte globální proměnné balíčku z datového slovníku

  4. Tabulka MySQL s primárním ID AUTO_INCREMENT neuvolňuje číslo po vrácení zpět