SqlAlchemy: nombre de colonnes distinctes sur plusieurs colonnes
Je ne peux pas faire:
>>> session.query(
func.count(distinct(Hit.ip_address, Hit.user_agent)).first()
TypeError: distinct() takes exactly 1 argument (2 given)
Je peux le faire:
session.query(
func.count(distinct(func.concat(Hit.ip_address, Hit.user_agent))).first()
Ce qui est bien (nombre d'utilisateurs uniques dans un "pageload' de la table db).
Ce n'est pas correct dans le cas général, par exemple, donnera un nombre de 1 au lieu de 2 pour le tableau suivant:
col_a | col_b
----------------
xx | yy
xxy | y
Est-il possible de générer le code SQL suivant (qui est valide dans postgresql au moins)?
SELECT count(distinct (col_a, col_b)) FROM my_table;
source d'informationauteur EoghanM
Vous devez vous connecter pour publier un commentaire.
Ressemble à sqlalchemy distinct() n'accepte qu'une seule colonne ou une expression.
Une autre façon est d'utiliser
group_by
etcount
. Cela devrait être plus efficace que l'utilisationconcat
de deux colonnes avec le groupe par la base de données devrait être en mesure d'utiliser des index si elles existent:Requête générée serait encore différente de ce à quoi vous m'avez demandé:
distinct()
accepte plus d'un argument lorsqu'elle est annexée à la requête de l'objet:Il devrait générer quelque chose comme:
qui est même un peu plus proche de ce que tu voulais.