Я бы порекомендовал написать запрос следующим образом:
select s.shop_id, t.retail_type,
avg(r.revenue_amount) as avg_revenue_amount
from shops s join
rev r
on s.shop_id = r.shop_id join
trans
t
on r.trans_id = t.trans_id
where t.retail_type in ('fashion', 'shoes')
group by s.shop_id, t.retail_type
order by avg_revenue_amount desc
limit 10;
Вы не указали свою базу данных, но следующее потенциально проблематично c:
- Неверные кавычки в
in
предложение. - Отсутствие псевдонима после производной таблицы.
- Использование числительных c заполнителей в
GROUP BY
.
Не все это обязательно ошибки, но они могут зависеть от вашей базы данных.
Следующее не приведет к синтаксической ошибке, но может вызвать другие проблемы:
- Пробелы вокруг строки для
IN
сравнение означает, что сравнение может не работать. - Использование произвольных букв для псевдонимов таблиц делает запрос действительно сложным.
- Предложение
WHERE
превращает LEFT JOIN
s во внутренний присоединяется, поэтому LEFT JOIN
s вводит в заблуждение. - Подзапрос излишен.