Size: a a a

2019 December 24

DS

David Shiko in SPb Python
А почему кстати просто select where нельзя воспользоваться?
источник

s

shigarus in SPb Python
Можно, выше написали тот же иннерджоин через where. Задача скорее всего вообще про группировку, но чтобы ответить - нужно знать какой тебе конкретно нужен результат выполнения sql-а, и, возможно - бд, которую используешь (т.к. аггрегирующие функции у них различаются)
источник

DS

David Shiko in SPb Python
shigarus
Можно, выше написали тот же иннерджоин через where. Задача скорее всего вообще про группировку, но чтобы ответить - нужно знать какой тебе конкретно нужен результат выполнения sql-а, и, возможно - бд, которую используешь (т.к. аггрегирующие функции у них различаются)
У меня задача не совсем ясная, т.к. у меня есть несколько возможных моделей (результатов) и, к сожалению, только время покажет какая модель лучше. БД SQLITE, но в будущем хочу перейти на более производительную.

Мне нужно выбрать из users людей с одинаковым (или близким) возрастом и полом, которые отметили максимально близкое количество одинаковых постов. Т.е. user 1 отметил 7 из 7, user 2 отметил 5 из 7.
Для простоты все смотрится с позиции юзера (т.е. дан конкретный пол, возраст и отметки).

Я это вижу так:
SELECT user_id FROM users WHERE age LIKE specifed_age AND GENDER = specifed_gender -- Это будет группа user_group (не знаю оператор объединения);
SELECT user_id FROM marks WHERE user_id = specifed_id AND mark = positive_mark; -- Это группа found_ids
SELECT user_id from user_group WHERE user_id in found_ids

Как то так. А теперь перепроверю что написал)
источник

C

Chikiro in SPb Python
David Shiko
У меня задача не совсем ясная, т.к. у меня есть несколько возможных моделей (результатов) и, к сожалению, только время покажет какая модель лучше. БД SQLITE, но в будущем хочу перейти на более производительную.

Мне нужно выбрать из users людей с одинаковым (или близким) возрастом и полом, которые отметили максимально близкое количество одинаковых постов. Т.е. user 1 отметил 7 из 7, user 2 отметил 5 из 7.
Для простоты все смотрится с позиции юзера (т.е. дан конкретный пол, возраст и отметки).

Я это вижу так:
SELECT user_id FROM users WHERE age LIKE specifed_age AND GENDER = specifed_gender -- Это будет группа user_group (не знаю оператор объединения);
SELECT user_id FROM marks WHERE user_id = specifed_id AND mark = positive_mark; -- Это группа found_ids
SELECT user_id from user_group WHERE user_id in found_ids

Как то так. А теперь перепроверю что написал)
У вас возраст навсегда один и тот же сохраняется? Нет дней рождения и смены года?
источник

DS

David Shiko in SPb Python
Chikiro
У вас возраст навсегда один и тот же сохраняется? Нет дней рождения и смены года?
Спасибо за замечание ))
Придется отсчитывать время жизни БД или переводить возраст в дату рождения
источник

C

Chikiro in SPb Python
Еще можно сверху таймзонами заполировать :D
источник

DS

David Shiko in SPb Python
Chikiro
Еще можно сверху таймзонами заполировать :D
Я даже месяц рождения во внимание не беру, а вы про TZ говорите)
источник

C

Chikiro in SPb Python
David Shiko
Я даже месяц рождения во внимание не беру, а вы про TZ говорите)
Все, что связано со временем - боль и страдания.
источник

DS

David Shiko in SPb Python
Chikiro
Все, что связано со временем - боль и страдания.
Еще с последнего дня прошлого тысячелетия так повелось))
источник

s

shigarus in SPb Python
подозреваю тут не особо важен конкретный возраст, достаточно одного года рождения. так?
источник

DS

David Shiko in SPb Python
shigarus
подозреваю тут не особо важен конкретный возраст, достаточно одного года рождения. так?
Да
источник

s

shigarus in SPb Python
возраст будет подаваться на вход в sql?
источник

DS

David Shiko in SPb Python
shigarus
возраст будет подаваться на вход в sql?
Да
источник

s

shigarus in SPb Python
не очень ясно что там про "первый отметил 7 из 7, а второй 5 из 7", но вот такой sql-ник даст посты, положительно отмеченные пользователями нужного года рождения, и рядом - их айдишники через запятую (если в birthdate - дата рождения, с только годом рождения проще). Возможно, group_concat внутри требует преобразование инта к строке, я так сходу про sqlite не скажу
select marks.post_id, group_concat(users.user_id)
from users
join marks on users.user_id = marks.user_id
where strftime('%Y', users.birthdate) = '<input_date>'
 and marks.mark = 'positive_mark'
group by marks.post_id
источник

s

shigarus in SPb Python
ну и запрос наверное в целом придется подправить под синтаксис sqlite, никогда не писал для нее код
источник

SM

Serge Matveenko in SPb Python
David Shiko
У меня задача не совсем ясная, т.к. у меня есть несколько возможных моделей (результатов) и, к сожалению, только время покажет какая модель лучше. БД SQLITE, но в будущем хочу перейти на более производительную.

Мне нужно выбрать из users людей с одинаковым (или близким) возрастом и полом, которые отметили максимально близкое количество одинаковых постов. Т.е. user 1 отметил 7 из 7, user 2 отметил 5 из 7.
Для простоты все смотрится с позиции юзера (т.е. дан конкретный пол, возраст и отметки).

Я это вижу так:
SELECT user_id FROM users WHERE age LIKE specifed_age AND GENDER = specifed_gender -- Это будет группа user_group (не знаю оператор объединения);
SELECT user_id FROM marks WHERE user_id = specifed_id AND mark = positive_mark; -- Это группа found_ids
SELECT user_id from user_group WHERE user_id in found_ids

Как то так. А теперь перепроверю что написал)
Таргетинг, например, в рекламе, не совсем так делается.
Просто очень похоже на задачу классификации пользователей. Видимо, тут какую-то рекомендательную сеть хочется сделать или таргетинг замутить.
Но опять проблема XY
источник

A

Alexander in SPb Python
Если надо в реалтайме агрегировать данные из таблиц(ы), то про обычный sql сразу можно забыть. На агрегирующих функциями и группировке (group by) данных умрёте
источник

A

Alexander in SPb Python
Нужно сразу в сторону какого-нибудь кликхауса смотреть
источник

AN

Alexander N in SPb Python
нужен программер для написания "сложного" Бота для Телеги. Подробности в ЛС
источник

IZ

Ilia Zviagin in SPb Python
Alexander
Если надо в реалтайме агрегировать данные из таблиц(ы), то про обычный sql сразу можно забыть. На агрегирующих функциями и группировке (group by) данных умрёте
Чёйта так сразу и забыть...
Там знаешь сколько нюансов?
источник