SQL: выберите количество и процент с условиями - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть две таблицы

Пользователь

   id_user|INT
   company | varchar

и

Вход

log_id|int
id_user|int

Мне нужно вернуть компанию, общее количество пользователей на компанию и процент пользователей, у которых есть по крайней мере 3 журнала

Я могу выполнить этот запрос, чтобы получить компанию и подсчитать

select company, count (*) as 'Count'
from user 
group by company

, который возвращает это

Apple| 7
Google| 6

Но у меня возникают проблемы с выяснением того, как затем вернуть дополнительный столбец, в котором отображается процент пользователей, у которых есть как минимум 3 журнала. Например, Если бы у 2 пользователей было более 3 журналов от Apple, и у одного пользователя от Google было более 3 журналов, ответ был бы следующим:

Apple| 7| 29% (because 2/7=~29%)
Google| 6| 17% (because 1/7=~17%)

Я полагал, что для этого требуется использовать функцию windows или какой-то тип коррелированного подзапроса, но у меня возникают проблемы с получением точного процента.

Любая помощь будет принята с благодарностью. (с использованием SQL Server 2008)

1 Ответ

0 голосов
/ 29 апреля 2018

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

WITH cte AS (
    SELECT id_user, COUNT(*) AS cnt
    FROM Log
    GROUP BY id_user
)

SELECT
    u.company,
    COUNT(DISTINCT u.id_user) AS total_users,
    100.0 * SUM(CASE WHEN c.cnt >= 3 THEN 1 ELSE 0 END) /
        COUNT(DISTINCT u.id_user) AS log_3_users
FROM [User] u
LEFT JOIN cte c
    ON u.id_user = c.id_user
GROUP BY
    u.company;

enter image description here

Демо

Обратите внимание, что в демоверсии у меня просто есть несколько фиктивных данных, где у 1 из 3 пользователей Google есть 3 или более журналов, а у 1 из 2 сотрудников Microsoft - 3 или более журналов.

...