Сгруппировать по «прочим», где группы с небольшим вкладом включены в поле «прочее» - MySQL

StackOverflow https://stackoverflow.com/questions/821370

  •  03-07-2019
  •  | 
  •  

Вопрос

Я бы хотел, чтобы GROUP BY элемент в моей таблице, который имеет соответствующую денежную стоимость. Это я могу рассчитать в процентах, однако в списке часто слишком много элементов (слишком много, чтобы быть полезным, например, в графике). Следовательно, я хотел бы поместить те предметы, которые имеют общий вклад менее, чем, скажем, 5%, в группу «Другие». Какие-нибудь мысли?

спасибо (используя MySQL > v5)

Это было полезно?

Решение

Похоже, профсоюз может помочь, например, (конечно, в зависимости от того, как организован ваш стол):

SELECT itemname, SUM(percent) AS pc FROM items
GROUP BY itemtype
HAVING SUM(percent) >= 0.05
UNION
SELECT 'Other', SUM(*) FROM
  (SELECT SUM(percent) FROM items
   GROUP BY itemtype
   HAVING SUM(percent) < 0.05)

Если у вас нет поля процента, а есть только (скажем) поле значения (поэтому необходимо динамически вычислять% как 100-кратную долю от значения элемента до общей суммы), вы можете получить общую сумму из еще один вложенный SELECT, но в какой-то момент, возможно, стоит перейти на процедурные подходы, как подсказывают другие респонденты.

Другие советы

Вы просили мысли. Я мог бы написать SQL для вас, но мне интересно (основываясь на вашем общем дизайне), вам может оказаться не так просто выполнить немного больше работы в BL или UI, например, с массивом, чтобы выполнить то же самое. С одной стороны, SQL обязательно будет более сложным и менее эффективным, чем вы могли бы.

создайте временную таблицу и создайте два оператора вставки: один из основных элементов и один из другой группы, а затем просто выберите все из временной таблицы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top