|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Добрый день ! Только начинаю в sql, возникла проблема с небольшим запросом в bq, буду рад любым советам. Есть две таблицы : installs и logins, в них есть колонки uid - уникальный ID пользователя, _PARTITION(timestamp) - дата Мне необходимо посчитать количество пользователей из таблицы installs в нужную мне дату и разделить на количество пользователей в другую дату из таблицы logins. (показатель retention, или удержания) Код : Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Результат запроса : Error: division by zero: 0 / 0 В чём может быть проблема? Заранее благодарю! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 17:24 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Vedash, В запросе всего одна таблица, которая соединяется сама с собой. Соответственно условие в where ни для одной из строк не может быть истинным. count определяет что получилось 0 строк и именно это значение в знаменателе дроби приводит к ошибке. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 17:40 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Павел Лузанов, Вы имеете в виду : Код: plsql 1. 2.
? Как я могу это исправить ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 17:46 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Vedash, Да, именно это. Замените installs на logins. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 18:00 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Попробовал по-другому : Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Выдало : Row 1 New_users 323 Retained_users 323 Retention 1 Что не может быть верным результатом, т.к. 2018-09-02 было в районе 3000 установок ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 18:02 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Павел Лузанов, Заменил Код: plsql 1. 2.
Правда, не понял, зачем. Результат, как и выше : 323 установлено и 323 залогинились на следующей день, что явно неверно :( ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 18:05 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Павел Лузанов, вангую, там null-ы в уидах, или исходное число записей -- 0. т.к. каунт от _внутренней_ таблицы внешнего соединения -- 0. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 18:06 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Павел ЛузановVedash, В запросе всего одна таблица, которая соединяется сама с собой. Соответственно условие в where ни для одной из строк не может быть истинным. count определяет что получилось 0 строк и именно это значение в знаменателе дроби приводит к ошибке. ага , понял 1.там левое соединение. но : 2. выделенное превращает его во внутреннее. по взаимоисключающему ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 18:12 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
qwwq, Если я понял, о чем Вы : Код: plsql 1. 2. 3. 4. 5.
Выдает 3172 Во второй таблице по аналогичном запросу очень много (около 21к) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 18:14 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Vedash, Ну уж покажите тогда что возвращает: Код: sql 1.
и Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 18:17 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
qwwq, соврал. не по взаимоискл. те же гуиды в другой день. но во внутреннее точно. т.е. почему 0 -- надо смотреть данные. скорее всего зря date кастится в таймстамп. надо наоборот. надо на типы в табле смотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 18:20 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Павел Лузанов, На первое выдает : Row f0_ f1_ 1 3172 3172 На второе выдает : Row f0_ f1_ 1 79150 27625 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 18:20 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
qwwq1.там левое соединение. но : 2. выделенное превращает его во внутреннее. по взаимоисключающему Согласен, условие из WHERE нужно в ON перенести. В терминах исходного запроса: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 18:21 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Павел Лузановqwwq1.там левое соединение. но : 2. выделенное превращает его во внутреннее. по взаимоисключающему Согласен, условие из WHERE нужно в ON перенести. В терминах исходного запроса: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Результат :( ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 18:24 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Vedash, Ох, что-то уже совсем голова не варит. Ну давайте так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 18:47 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Vedash, А одинаковых uid в logins наверное может быть несколько? Тогда видимо требуется оставить только уникальные в последнем запросе: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 18:53 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Vedash, Переборщил с включением в ON условий. Должно быть так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
или так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2018, 22:02 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Павел ЛузановVedash, или так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Супер! Всё получилось, как надо:) Спасибо огромное, даже не думал, что так подробно поможете) Я, наверное, совсем борзею, но у меня опять ступор : теперь аналогичный запрос нужно сделать по дням (с отображением даты) на месяц. Также умножил Retention на 100 - для отображения в процентах. Пробую мудрить с _PARTITIONTIME, пока не очень выходит : Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Хочется запросить таблицу с каждым днём, в котором будет указано число и % Retained users Результат : ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2018, 11:57 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Vedash, Насколько я понимаю, нужно где-то впихнуть interval '1 day' (если такая функция вообще работает в standart SQL) и limit 30. Если с лимитом всё понятно - можно в конце всего запроса дописать, то с синтаксисом интервала совсем беда. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2018, 12:01 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Vedash, Ну что-то типа: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2018, 14:33 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Павел ЛузановVedash, Ну что-то типа: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
почему-то ругается на синтаксис с interval : Error: Syntax error: Unexpected keyword INTERVAL ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2018, 15:47 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Vedash, А какая база данных, кстати? Что выдает: SELECT now() + INTERVAL '1 Day'; ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2018, 15:59 |
|
Небольшой запроc в bigquery
|
|||
---|---|---|---|
#18+
Павел ЛузановVedash, А какая база данных, кстати? Что выдает: SELECT now() + INTERVAL '1 Day'; Аналогично : Query Failed Error: Syntax error: Unexpected keyword INTERVAL at [1:16] ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2018, 16:02 |
|
|
start [/forum/topic.php?fid=53&fpage=48&tid=1995517]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 275ms |
total: | 426ms |
0 / 0 |