Jointure SQL "un à plusieurs" de la relation - compter le nombre de votes par l'image?
Ok, donc, j'ai 2 tables:
images votes
---------------------------- --------------------
image_id | name | square_id vote_id | image_id
---------------------------- --------------------
1 someImg 14 1 45
2 newImg 3 2 18
3 blandImg 76 3 1
... ...
n n
C'est un "un à plusieurs" de la relation. Chaque image peut avoir plusieurs voix, mais un vote ne peut être relié qu'à une seule image. Je suis en train de produire une requête de jointure qui affichera l'id de l'image, et le nombre de voix qu'il possède en vertu d'une condition spécifiée (par exemple, basé sur square_id
). Ainsi, le résultat de la requête devrait ressembler à ceci:
query_result
----------------------
image_id | vote_count
----------------------
18 46
26 32
20 18
...
55 1
Mais le mieux que je puisse faire est ceci:
query_result
----------------------
image_id | vote_id
----------------------
18 46
18 45
18 127
26 66
26 43
55 1
Voir le problème? Chaque image_id
figure plusieurs fois pour chaque vote_id
. C'est la requête qui produit ce:
SELECT images.image_id, votes.vote_id
FROM votes JOIN images ON images.image_id=votes.image_id
Je n'arrive pas à créer un vote_count
colonne qui est la somme de tous les votes de cette image. Est-il possible que je peux utiliser le count()
fonction pour le faire, que je suis tout simplement pas au courant?
OriginalL'auteur ReactingToAngularVues | 2013-09-02
Vous devez vous connecter pour publier un commentaire.
Vous devez
GROUP BY images.image_id
et l'utilisationCOUNT(votes.vote_id)
:Ce n'est pas sur le type de relation, sur le groupe, la
GROUP BY
fait ici une liste de valeurs distinctes deimage_id
puis pour l'autre colonnevote_id
il utilise une fonction d'agrégation, ce qui est leCOUNT
qui compte le nombre de votes pour chaque regroupésimage_id
.Merci pour votre aide!
Vous êtes les bienvenus à tout moment 🙂 Vous avez besoin de pour en savoir plus sur les bases de requêtes sql, voici un livre parfait: amazon.com/SQL-Queries-Mere-Mortals-Manipulation/dp/0321444434
OriginalL'auteur Mahmoud Gamal
En général, vous devez utiliser
GROUP BY
lors de l'utilisation d'agrégats commeCOUNT()
:Je ne suis pas 100% clair sur ce que vous entendez par
Votre modèle semble modèle
square_id
par rapport à l'image et ne peut être utilisé comme unwhere
filtre surimages
, pas sur une relation entre les voix et les images.GROUP BY permet de 'pin' une ou de plusieurs colonnes et d'utiliser des agrégats comme
COUNT()
,SUM()
,MIN()
etc. Si vous pouvez donner un exemple de votre relation, je peux mettre à jour la réponse.OriginalL'auteur StuartLC