У меня есть 2 таблицы (это только часть столбцов таблицы, которые необходимы для этого запроса):
Items: Id int, OwnerId int
ItemsRelations: RelationId int, ItemId Int (FK Items(Id))
Для каждого OwnerId мне нужно вычислить результат функции отношения:
Количество пользовательских элементов, которые имеют ссылки на ItemsRelationstable / count всех пользовательских элементов.
Я написал этот запрос, но он медленный и неоптимальный. Есть ли более простой и быстрый способ сделать это?
SELECT OwnerId , (100 * SUM(HasRelation))/COUNT(Id) AS Ratio
FROM (
SELECT
oi.OwnerId,
oi.Id,
(CASE WHEN SUM(ir.Id) > 0 THEN 1 ELSE 0 END) HasRelation
FROM Items AS oi
LEFT JOIN ItemsRelations AS ir ON ir.ItemId = oi.Id
GROUP BY oi.Id, oi.OwnerId) tempTab
GROUP BY OwnerId