запрос процента вхождений в таблицу SQL

#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.