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