Okay, ho 2 tabelle:SQL unisce una relazione uno a molti - conta il numero di voti per immagine?
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
questo è un uno a molti. Ogni immagine può avere più voti, ma un voto può essere associato solo a un'immagine. Sto cercando di produrre una query di join che mostrerà l'id immagine e il numero di voti che ha in una condizione specificata (ad esempio, in base a square_id
). Così il risultato della query sarà simile a questo:
query_result
----------------------
image_id | vote_count
----------------------
18 46
26 32
20 18
...
55 1
Ma il meglio che posso fare è questo:
query_result
----------------------
image_id | vote_id
----------------------
18 46
18 45
18 127
26 66
26 43
55 1
vedere il problema? Ogni image_id
è elencato più volte per ogni vote_id
che ha. Questa è la domanda che produce questo:
SELECT images.image_id, votes.vote_id
FROM votes JOIN images ON images.image_id=votes.image_id
io proprio non riesco a creare una colonna vote_count
che è la somma di tutti i voti che immagine ha. C'è un modo in cui posso usare la funzione count()
per farlo, di cui semplicemente non sono a conoscenza?
Wow! Funziona ... perfettamente! Dov'è la magia qui? La funzione GROUP BY prende una relazione 1-a-molti e la trasforma in una relazione 1 a 1? – ReactingToAngularVues
@Antilogico - Non è relativo al tipo di relazione, è relativo al gruppo, 'GROUP BY' qui fa un elenco di valori distinti di' image_id', quindi per l'altra colonna 'vote_id' usa una funzione di aggregazione con esso, che è il 'COUNT' che conta i voti per ogni gruppo' image_id'. –
Grazie per il tuo aiuto! – ReactingToAngularVues