У меня есть запрос ниже:

SELECT ds, 
       round(count(CASE WHEN action = 'accepted' THEN 1 
             ELSE NULL END) * 1.0 / count(action),2) * 100 as perc
FROM friend_requests
group by 1

Выход:

perc
50.00
100.00
50.00

Желаемый результат:

perc
50
100
50

Если я хочу удалить десятичные дроби и оставить только 50 или 100, как я могу это отредактировать? Я пытаюсь изменить параметр 2 в раунде на 0, и он просто округляет все значения до 100

Благодарность

0
Chris90 18 Сен 2021 в 01:30

2 ответа

Лучший ответ

Преобразуйте поле perc как тип int и удалите функцию round:

SELECT
    ds,
    cast(count(CASE WHEN action = 'accepted' THEN 1 ELSE NULL END) * 1.0 / count(action) * 100 as int) as perc
FROM friend_requests
group by 1
1
gbeaven 17 Сен 2021 в 22:57

Я бы предложил сформулировать логику так:

SELECT ds, 
       round(avg( (action = 'accepted')::int) * 100), 0) as perc
FROM friend_requests
GROUP BY 1
0
Gordon Linoff 17 Сен 2021 в 23:05