Процентное распределение встречаемости столбцов?

#sql #postgresql

#sql #postgresql

Вопрос:

Я ищу способ рассчитать распределение значений столбцов в моей таблице. например, если у меня есть две строки, содержащие «красный» и «синий», у каждого должно быть 50%. Я хочу подсчитать количество встречаемости col и сравнить это с общим количеством строк.

Моя попытка:

 SELECT
    log_domain,
    count(log_domain),
    count(log_domain) over(),
    ROUND(
        COUNT(log_domain)
        /
        COUNT(*) OVER()
    ,2) AS percentage

FROM logs

GROUP BY log_domain

 

Любая помощь? Спасибо!

Ответ №1:

Просто обратите внимание на целочисленное деление. Я часто просто умножаю на 1.0:

 SELECT log_domain, COUNT(*), COUNT(*) OVER (),
        ROUND(COUNT(*) * 1.0 / SUM(COUNT(*)) OVER (), 2) as ratio
FROM logs
GROUP BY log_domain;
 

Я также замечаю, что знаменатель должен быть SUM(COUNT(*)) , а не COUNT(*) . Ваша версия просто делится на количество строк в результирующем наборе, то есть на количество значений log_domain .