Сгруппировать по "прочим", где группы с небольшим вкладом включены в поле "прочее" - MySQL
Я бы хотел, чтобы GROUP BY элемент в моей таблице, который имеет соответствующую денежную стоимость. Это я могу рассчитать в процентах, однако в списке часто слишком много элементов (слишком много, чтобы быть полезным, например, в графике). Следовательно, я хотел бы поместить те предметы, которые имеют общий вклад менее, чем, скажем, 5%, в группу "Другие". Какие-нибудь мысли?
спасибо (используя MySQL > v5)
3 ответа
Похоже, что UNION может помочь, например (в зависимости от того, как организован ваш стол, конечно):
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-кратную долю от значения элемента до общей суммы), вы можете получить общую сумму из еще одного вложенного элемента. ВЫБРАТЬ, но в какой-то момент, возможно, стоит перейти на процедурные подходы, как намекают другие респонденты
Создайте временную таблицу и получите две инструкции вставки, одну из ваших основных вещей и одну из другой группы, а затем просто выберите все из временной таблицы.
Вы просили мысли. Я мог бы написать SQL для вас, но мне интересно (основываясь на вашем общем дизайне), вам может быть не проще выполнить немного больше работы в BL или UI, например, с массивом, чтобы выполнить то же самое. С одной стороны, SQL обязательно будет более сложным и менее эффективным, чем вы могли бы захотеть.