Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Подвис с запросом SQL

Задача: Давайте рассчитаем настоящую бизнес-метрику — conversion rate, или
CR. Это доля уникальных пользователей от пользователей в целом из таблицы
hotdog. Разделите число уникальных пользователей на число всех пользователей.
Используйте поле bracelet_id.
Дан шаблон:

123
 1. SELECT -- впишите сюда формулу 
2. ::numeric -- не удаляйте эту строку из-за особенностей деления 
3. FROM hotdog; 

Для проверки сначала получаю число уникальных пользователей и отдельно число всех пользователей, вот так:

12345
 1. SELECT  
2.     COUNT(DISTINCT(bracelet_id)) as unic, 
3.     COUNT(bracelet_id) 
4.     ::numeric -- не удаляйте эту строку из-за особенностей деления 
5. FROM hotdog  

Результат:

123
 Результат 
unic	count 
130	870 

Теперь делю одно на другое:

1234
 1 SELECT  
2       (count(DISTINCT(bracelet_id))/COUNT(bracelet_id)) as CR 
3      ::numeric -- не удаляйте эту строку из-за особенностей деления 
4 FROM hotdog  

Ругается вот так:

12345678
 Результат 
syntax error at or near "::" 
 
SELECT  
       (count(DISTINCT(bracelet_id))/COUNT(bracelet_id)) as CR 
       ::numeric -- не удаляйте эту строку из-за особенностей деления 
        ^^^ 
FROM hotdog  

А если строку 3 ::numeric закомментировать, не ругается, производит деление, но вот так:

123
 Результат 
cr 
0 

Подскажите, пжл, в чем эти два косяка?

По дате
По рейтингу
Аватар пользователя
Ученик

SELECT COUNT(DISTINCT(bracelet_id))/COUNT(bracelet_id)
::numeric
FROM hotdog
вот правильный код.

Аватар пользователя
Просветленный

:: numeric - это приведение к вещественному типу какого-то значения. В варианте, где ругается ты никакое значение не приводишь, вот и ругается. Думаю, нужно привести первое значение к numeric, второе будет приведено неявно, но это не точно, возможно надо привести к numeric оба значения.

123
 SELECT   
       (count(DISTINCT(bracelet_id))::numeric/COUNT(bracelet_id)) as CR  
FROM hotdog 

Попробуй так

Аватар пользователя
Ученик
5мес

SELECT COUNT(DISTINCT(bracelet_id))::numeric/COUNT(bracelet_id) as cr

FROM hotdog;

Аватар пользователя
Искусственный Интеллект

Операторы приведения должны следовать в одной строке