Деление в группе по таблице SQL

У меня есть следующий код SQL

SELECT (COUNT(*) filter (WHERE has_a)) AS count_a, 
COUNT(*) AS total_count,
process_date
FROM(SELECT process_date::date AS process_date,
    (CASE WHEN (columnA > 0) THEN true ELSE false END) AS has_a
    FROM my_table)
temptable
GROUP BY process_date
LIMIT 5;

что дает следующую таблицу

Деление в группе по таблице SQL

Я хочу создать столбец с именем процент_а со значением (count_a/total_count)*100, сгруппированным по process_date. Например, для строки 1 новый столбец будет иметь значение 49,4, т.е. (1030/2085)*100.

я пытался

SELECT process_date,
    ((COUNT(*) filter (WHERE has_a))/COUNT(*) * 100) AS percent_a,
    FROM(SELECT process_date::date AS process_date,
        (CASE WHEN (columnA > 0) THEN true ELSE false END) AS has_a,
         FROM my_table)
temptable
GROUP BY process_date
ORDER BY process_date DESC
LIMIT 1;

Но это только дало 0s.

Деление в группе по таблице SQL

Как я могу создать столбец для отображения нужного мне процента? Я думаю, что что-то происходит с GROUP BY, но я не знаю, как это исправить.

Подсказка: select 1/2 x, 1.0/2 y

Serg 17.03.2022 11:36
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это потому, что count возвращает целое число, вам просто нужно его привести:

SELECT process_date,
    (((COUNT(*) filter (WHERE has_balance))::DOUBLE PRECISION)/COUNT(*) * 100) AS percent_a,
    FROM(SELECT process_date::date AS process_date,
        (CASE WHEN (columnA > 0) THEN true ELSE false END) AS has_a,
         FROM my_table)
temptable
GROUP BY process_date
ORDER BY process_date DESC
LIMIT 1;

Другие вопросы по теме