как вычислить процент в mysql / sql, когда присутствуют 2 группы по условиям

0
id title   count organizer
1  music   4     2
2  sports  6     2
3  music   2     3

У меня есть производная таблица с вышеуказанной структурой. Мне нужно посчитать процент от количества событий каждого организатора для каждого заголовка. то есть я ожидаю такой результат:

organizer  title   percentage
2          music   40%
2          sports  60%
3          music   100%

То, как я делаю это без учета организатора, позволяет легко получить процент, объединяющий все значения, но при представлении органайзера все портится. Может кто-нибудь помочь мне здесь??

  • 0
    Пожалуйста, покажите ваши исходные данные и запрос пока. Показывать нам результаты и говорить «это неправильно, помогите мне» не так уж полезно для нас
  • 0
    @CaiusJard Данные не верны. Вот данные, которые я хочу получить. Таблица очень большая, чтобы разместить все это. Мой запрос на данный момент дал первую таблицу.
Показать ещё 1 комментарий
Теги:
database
group-by
aggregation

2 ответа

2
Лучший ответ

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

select to.organizer, to.title, 100.0*to.count/o.count as percentage
from
  (select organizer, sum(count) as count from derivedtable group by organizer) o
  inner join
  derivedtable to 
  on
    to.organizer = o.organizer

Он работает путем суммирования данных по каждому организатору, чтобы получить итоговое значение, и присоединяя их обратно к имеющимся у вас данным, чтобы вы могли сделать конкретное число организаторов событий, деленное на общее количество для этого организатора.

Возможно, существует более простой способ сделать это с вашими исходными данными, так как вам придется подключить свой запрос, который создаст вашу производную таблицу, возможно, запутав ее. Вероятно, проще всего это сделать в виде CTE, но постарайтесь включить исходные данные источника и "запрос пока" в следующий раз, когда вы зададите вопрос, в противном случае нам придется строить решение поверх решения, о котором мы ничего не знаем, и результат может не быть оптимальным

1

Вы можете попробовать ниже - используя скалярный подзапрос

DEMO

select organizer,title,count*100/(select sum(count) from tablename b where a.organizer=b.organizer)
from tablename a

ВЫХОД:

organizer   title   percentage
   2        music   40.0000
   2        sports  60.0000
   3        music   100.0000

Ещё вопросы

Сообщество Overcoder
Наверх
Меню