Моя проблема в том, как я должен использовать distint()
таким образом, чтобы удалять / игнорировать дубликаты строк в базе данных на основе значения одного столбца. Итак, вот мой сценарий.
У меня есть база данных test_db
со следующими данными:
values_list = [
{'tweet_id': '1', 'retweet': '100', 'user_id': '101'},
{'tweet_id': '2', 'retweet': '10', 'user_id': '101'},
{'tweet_id': '2', 'retweet': '11', 'user_id': '101'},
{'tweet_id': '10', 'retweet': '110', 'user_id': '102'},
{'tweet_id': '10', 'retweet': '110', 'user_id': '102'},
{'tweet_id': '110', 'retweet': '0', 'user_id': '2'},
]
Я хотел бы суммировать количество ретвитов и количество твитов для каждого пользователя, определенного как user_id
. Мой запрос на такой вопрос выглядит следующим образом:
q = select([
test_db.columns.user_id,
test_db.columns.tweet_id.distinct(),
func.count(test_db.columns.retweet).label('count'),
func.sum(cast(test_db.columns.retweet, Integer)).label('total_retweet'),
])
q = q.group_by(test_db.columns.user_id)
Я получаю следующее:
user_id tweet_id count total_retweet
102 10 2 220
101 2 3 121
2 110 1 0
Но мой ожидаемый результат должен быть примерно таким:
user_id tweet_id count total_retweet
102 10 1 110
101 2 2 111
2 110 1 0
Я не уверен, как мне заставить distinct
добиться ожидаемых результатов, или есть другой способ решить эту проблему.
Спасибо!