我有一个我在 PostgreSQL 中运行的 SQL 查询,看起来像这样:(ActiveRecord 生成的很抱歉,如果它没有尽可能优化)
SELECT DISTINCT items.id,
CASE WHEN items.marker is not null
THEN (items.rating - (educations.cards_done - items.marker))
WHEN items.marker is null
THEN 0
END AS order
FROM items
INNER JOIN educations ON educations.item_id = items.id
WHERE items.active = true
ORDER BY
CASE WHEN items.marker is not null
THEN (items.rating - (educations.cards_done - items.marker))
WHEN items.marker is null
THEN 0
END
LIMIT 10
是否可以通过 PostgreSQL 中的 case 语句对该顺序进行索引?如果没有,有没有其他方法可以加快这个查询?感谢您的任何帮助,您可以提供!