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