#mysql #sql
#mysql #sql
Вопрос:
Допустим, у меня есть таблица, содержащая 100 товаров, и стоимость продаж для указанных товаров. Теоретически, я хотел бы иметь возможность получить 15 самых продаваемых товаров с нижней строкой для их общих продаж (всего только 15 лучших) и иметь еще один столбец с% долей продаж каждого товара относительно общего объема продаж (всего всех товаров в таблице).
Я подумал, что, возможно, использование rank, limit 15 и GROUP BY rank С ПОМОЩЬЮ ROLLUP решит первую половину моей проблемы, но я не могу понять, как после этого я мог бы ссылаться на общие продажи всех 100 товаров, чтобы получить столбец% share.
Возможно ли это? Большое спасибо
Комментарии:
1. Примерные данные и желаемые результаты.
2. Что еще вы хотите, кроме приведенного ниже кода? Я думаю, что это работает правильно.
3. Как правило, проблемы отображения данных лучше всего решаются в коде приложения
Ответ №1:
Возможно, проще всего просто выполнить вычисление дважды:
with i15 as (
select t.item, sum(sales) as sales,
sum(sales) / sum(sum(sales)) over () as sales_ratio
from t
group by t.item
order by sum(sales) desc
limit 15
)
select item, sales, sales_ratio
from i15
union all
select 'total', sum(sales), sum(sales_ratio)
from i15;