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

MySQL - vyberte hodnocení pro uživatele v tabulce skóre

I když si nejsem jistý, co v tomto kontextu znamená "problematický", zde je dotaz přepsán jako prostý LEFT JOIN s poddotazem jen proto, abyste získali hodnocení přímo na konci (ORDER BY je třeba provést před hodnocením);

SELECT user_id, score, @rank := @rank + 1 AS rank FROM
(
  SELECT u.user_id, u.score
  FROM user_score u
  LEFT JOIN user_score u2
    ON u.user_id=u2.user_id
   AND u.`timestamp` < u2.`timestamp`
  WHERE u2.`timestamp` IS NULL
  ORDER BY u.score DESC
) zz, (SELECT @rank := 0) z;

Otestujte SQLfiddle .

EDIT:Chcete-li vzít v úvahu group_id, budete muset dotaz poněkud rozšířit;

SELECT user_id, score, @rank := @rank + 1 AS rank FROM
(
  SELECT u.user_id, u.score
  FROM user_score u
  LEFT JOIN user_score u2
    ON u.user_id=u2.user_id
   AND u.group_id = u2.group_id       -- u and u2 have the same group
   AND u.`timestamp` < u2.`timestamp`
  WHERE u2.`timestamp` IS NULL
    AND u.group_id = 1                -- ...and that group is group 1
  ORDER BY u.score DESC
) zz, (SELECT @rank := 0) z;

Další SQLfiddle .



  1. Je možné nastavit výchozí schéma z připojovacího řetězce?

  2. Odkazování na uživatelem definované typy Oracle přes DBLINK?

  3. SQL:spočítá všechny záznamy s po sobě jdoucím výskytem stejné hodnoty pro každou sadu zařízení a vrátí nejvyšší počet

  4. Je použití mysql_insert_id bezpečné?