У меня есть таблица имен, где в каждой строке есть столбцы name и occurrences.
name
occurrences
. Я бы хотел вычислить процентное соотношение определенного имени из таблицы.
Как я могу сделать это одним запросом?
Вы можете получить его, используя SUM(occurrences):
SUM(occurrences)
select name, 100.0 * sum(occurrences) / (select sum(occurrences) from users) as percentage from users where name = 'Bob'
Попробуйте это:
SELECT name, cast(sum(occurance) as float) / (select sum(occurance) from test) * 100 percentage FROM test where name like '%dog%'
Демо здесь
Я думаю, что условное агрегирование - лучший подход:
select sum(case when name = @name then occurrences else 0 end) / sum(occurrences) as ratio from t;
Если вы хотите, чтобы фактический процент от 0 до 100 умножился на 100.
Это не очень элегантно из-за подзапроса в списке полей, но это сработает, если вы захотите его в одном запросе:
SELECT `name`, (CAST(SUM(`occurance`) AS DOUBLE)/CAST((SELECT SUM(`occurance`) FROM `user`) AS DOUBLE)) as `percent` FROM `user` WHERE `name`='miroslav';
Пример Fiddle
Надеюсь, это поможет,