рассчитать частоту

у меня есть таблица с переменной версии с модальностями V1, V2, V3, V4 и другим вызовом переменной, это может быть 1 или 0. что мне нужно сделать, это рассчитать частоту 1 до общего количества строк для каждой модальности версии: например, для V1 у меня есть 6 строк с вызовом, равным 1, и 13 строк в глобальном масштабе, мне нужно создать переменную freq, которая будет указывать 6/13. что я делаю сейчас, так это создаю 2 таблицы: первую с количеством строк с вызовом, равным 1 для каждой

version Version Call=1 
             V1      6
             V2      4
             V3      8
             V4      3

и вторая таблица с общим количеством строк каждой версии

   Version Call total
     V1      13
     V2      14
     V3      15
     V4      23

Затем я присоединяюсь к этим двум таблицам и вычисляю частоту. Я хотел спросить, нет ли другого способа сделать это?

это мой код:

create table Call1 select *, count(*) as call1 from Version where call like '1'group by Version;
create table Calltotal select *, count(*) as calltot from Version group by Version;
update Calltotal change Version Version1 VARCHAR(2);
alter table Call1 add index (Version);
alter table Calltot add index(Version1);
create table final select * from Call1 left join Calltot on Call1.version=Calltot.version1;
alter table final add frequency INT NOT NULL;
update final set frequency=call1/Calltot;

person Begayim Muratalina    schedule 28.01.2013    source источник
comment
Можете ли вы показать нам свой код?   -  person Kermit    schedule 28.01.2013
comment
создать таблицу Call1, выбрать , подсчитать () как call1 из версии, где вызов типа «1» сгруппировать по версии; создать таблицу Calltotal, выбрать , подсчитать () как calltot из группы «Версия» по версии; обновить Calltotal изменить Версия Version1 VARCHAR(2); изменить таблицу Call1 добавить индекс (версия); изменить таблицу Calltot добавить индекс (версия1); создать таблицу final select * from Call1 left join Calltot on Call1.version=Calltot.version1; изменить частоту окончательного добавления таблицы INT NOT NULL; обновить окончательную установленную частоту=call1/Calltot;   -  person Begayim Muratalina    schedule 28.01.2013
comment
Не ваш CREATE, ваш запрос; и обновите свой вопрос, не пишите в комментариях.   -  person Kermit    schedule 28.01.2013
comment
@BegayimMuratalina Я думаю, они имели в виду «отредактировать исходный пост»!   -  person Strawberry    schedule 28.01.2013


Ответы (1)


Указатель...

SELECT thing
     , COUNT(CASE WHEN other_thing = 10 THEN 'foo' END) x 
     , COUNT(*) y  
  FROM my_table 
 GROUP 
    BY thing;
person Strawberry    schedule 28.01.2013
comment
Хорошо, в MySQL бит CASE можно упростить до SUM(a=b), но приведенное выше решение более переносимо. - person Strawberry; 28.01.2013