で参加して、グループ:http://sqlfiddle.com/#!9/81b33/1
SELECT
user_id,
SUM(points) AS points
FROM
(
SELECT
a.user_id,
points
FROM
(
SELECT
user_id,
SUM(points_earned) AS points
FROM
points_earned
GROUP BY
user_id
) AS a
UNION
SELECT
user_id,
SUM(points_loss) * - 1 AS points
FROM
points_loss
GROUP BY
user_id
) AS points
GROUP BY
user_id
ORDER BY
points DESC,
user_id ASC
あなたが持っているしたい場合は結果の数値など、実際のランクは、このクエリを使用することができます。http://sqlfiddle.com/#!9/81b33/3
SELECT
user_id,
points,
@curRank := IF (
@prevRank = points,
@curRank,
@incRank
) AS rank,
@incRank := @incRank + 1,
@prevRank := points
FROM
(
SELECT
*
FROM
(
SELECT
@curRank := 0,
@prevRank := NULL,
@incRank := 1
) AS count,
(
SELECT
a.user_id,
points
FROM
(
SELECT
user_id,
SUM(points_earned) AS points
FROM
points_earned
GROUP BY
user_id
) AS a
UNION
SELECT
user_id,
SUM(points_loss) * - 1 AS points
FROM
points_loss
GROUP BY
user_id
) AS points
GROUP BY
user_id
ORDER BY
points DESC,
user_id ASC
) AS ranking
方法2人のユーザーが同じ合計金額を持っている場合は、再処理されますか? – Philipp
それでは、ユーザのIDのASC順だけにすることができます。 – webdev
どのようにそれを探している、私たちのソリューションはあなたの問題に適合しましたか? @webdev – Philipp