MySQL выбирает СУММУ результатов, игнорируя ОГРАНИЧЕНИЕ

#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;