Мы можем попытаться ввести столбец вычислений в CTE, который отслеживает, соответствует ли данный пользователь пользователю, выполняющему ранжирование. Затем выберите из этого CTE и выполните заказ, используя вычисляемый столбец.
WITH cte AS (
SELECT p.ID, p.points,
CASE WHEN c.my_id = 57 THEN 0 ELSE 1 END AS position
FROM profiles p
INNER JOIN circles c
ON p.ID = c.other_id
)
SELECT ID, points
FROM cte
ORDER BY position, points DESC;
Один крайний случай здесь заключается в том, что пользователь, выполняющий ранжирование, не будет отображаться в списке ниже. Если вы действительно хотите, чтобы ранжирующий пользователь появлялся как в списке, так и в верхней части, вам нужно будет использовать объединение:
SELECT p.ID, p.points, 0 AS position
FROM profiles p
INNER JOIN circles c
ON p.ID = c.other_id
WHERE c.my_id = 57
UNION ALL
SELECT p.ID, p.points, 1
FROM profiles p
INNER JOIN circles c
ON p.ID = c.other_id
ORDER BY
3, 2 DESC;