Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Арифметическое деление  [new]
themrfox
Member

Откуда:
Сообщений: 5
Привет

Помогите, пожалуйста. У меня есть два sql запроса и мне надо получить результат деления их значений
select count (uid) from public.sec_user where elogin IS NOT NULL AND is_active <> false 

и
select count (uid) from public.sec_user where elogin IS NOT NULL AND is_active <> false and datecontact >= CURRENT_DATE - INTERVAL '1 month'


Я попробовал что-то такое, но ничего не срабатывает
select count (uid) case when (elogin Is Not Null And is_active <> false  then 1 else 0 end)/count (uid) case when (elogin IS NOT NULL AND is_active <> false and datecontact >= CURRENT_DATE - INTERVAL '1 month' then 1 else 0 end) from public.sec_user

Спасибо
15 фев 21, 09:41    [22280950]     Ответить | Цитировать Сообщить модератору
 Re: Арифметическое деление  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1246
themrfox,

вместо выдумывания несуществующего синтаксиса полезнее искать существующий. https://www.postgresql.org/docs/current/sql-expressions.html#SYNTAX-AGGREGATES
count(...) filter(where ...)
15 фев 21, 10:17    [22280980]     Ответить | Цитировать Сообщить модератору
 Re: Арифметическое деление  [new]
themrfox
Member

Откуда:
Сообщений: 5
Melkij
themrfox,

вместо выдумывания несуществующего синтаксиса полезнее искать существующий. https://www.postgresql.org/docs/current/sql-expressions.html#SYNTAX-AGGREGATES
count(...) filter(where ...)

Я смотрел документацию, если бы вы могли уточнить как верно, я был бы очень благодарен, sql я почти не знаю
15 фев 21, 10:54    [22280988]     Ответить | Цитировать Сообщить модератору
 Re: Арифметическое деление  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4581
themrfox
Melkij
themrfox,

вместо выдумывания несуществующего синтаксиса полезнее искать существующий. https://www.postgresql.org/docs/current/sql-expressions.html#SYNTAX-AGGREGATES
count(...) filter(where ...)

Я смотрел документацию, если бы вы могли уточнить как верно, я был бы очень благодарен, sql я почти не знаю
ъ

Ооххх...
select 
(count(uid) FILTER (WHERE elogin Is Not Null And is_active <> false))
/
(count(uid) FILTER (WHERE elogin IS NOT NULL AND is_active <> false and datecontact >= CURRENT_DATE - INTERVAL '1 month'))
from public.sec_user;


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru

Сообщение было отредактировано: 15 фев 21, 14:06
15 фев 21, 13:42    [22281089]     Ответить | Цитировать Сообщить модератору
 Re: Арифметическое деление  [new]
themrfox
Member

Откуда:
Сообщений: 5
Maxim Boguk,
Большое спасибо, но так тоже не срабатывает
[img=]

Модератор: Вложение удалено.


Сообщение было отредактировано: 15 фев 21, 14:06
15 фев 21, 14:05    [22281105]     Ответить | Цитировать Сообщить модератору
 Re: Арифметическое деление  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4581
themrfox,

1)за присылание скриншотов вместо текстов ошибки - буду банить скоро. Уважайте людей которые вам пытаются помочь.

2)это артефакты copy/paste я уже поправил запрос в ответе... попробуйте новую версию

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
15 фев 21, 14:15    [22281111]     Ответить | Цитировать Сообщить модератору
 Re: Арифметическое деление  [new]
themrfox
Member

Откуда:
Сообщений: 5
Maxim Boguk,
Извините, пожалуйста, я не знал. Спасибо Вам за помощь, но по-отдельности
select (count(uid) FILTER (WHERE elogin Is Not Null And is_active <> false)) from public.sec_user

выдает 4352
Отдельно
select (count(uid) FILTER (WHERE elogin IS NOT NULL AND is_active <> false and datecontact >= CURRENT_DATE - INTERVAL '1 month')) from public.sec_user;
выдаёт 2919
А с деление выдаётся резутатат 1 :(
15 фев 21, 14:37    [22281129]     Ответить | Цитировать Сообщить модератору
 Re: Арифметическое деление  [new]
fte
Member

Откуда: Moscow
Сообщений: 392
themrfox
Maxim Boguk,
Большое спасибо, но так тоже не срабатывает
[img=]

Модератор: Вложение удалено.


Очевидно автора топика на устраивает деление bigint на bigint, видимо ему нужно
(count(uid) FILTER (WHERE elogin Is Not Null And is_active <> false))::numeric
15 фев 21, 14:41    [22281134]     Ответить | Цитировать Сообщить модератору
 Re: Арифметическое деление  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4581
themrfox
Maxim Boguk,
Извините, пожалуйста, я не знал. Спасибо Вам за помощь, но по-отдельности
select (count(uid) FILTER (WHERE elogin Is Not Null And is_active <> false)) from public.sec_user

выдает 4352
Отдельно
select (count(uid) FILTER (WHERE elogin IS NOT NULL AND is_active <> false and datecontact >= CURRENT_DATE - INTERVAL '1 month')) from public.sec_user;
выдаёт 2919
А с деление выдаётся резутатат 1 :(
'

А сколько должно выдавать?

mboguk@my-travel-laptop:~$ bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
4352/2919
1


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
15 фев 21, 15:06    [22281161]     Ответить | Цитировать Сообщить модератору
 Re: Арифметическое деление  [new]
themrfox
Member

Откуда:
Сообщений: 5
Maxim Boguk, fte

Все так и есть, проблема была с целочисленным типом деления, так все отлично работает, с использованием numeric
Спасибо вам огромное!!!
15 фев 21, 15:10    [22281164]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить