Как сказал Билл Карвин, делать все это в рамках одного запроса довольно некрасиво.
Но, если вам нужно это сделать, для объединения и выбора неагрегированных данных с агрегированными данными требуется объединение с подзапросами (в последние несколько лет я не так часто использовал SQL, поэтому я действительно забыл подходящий термин для этого) .
Предположим, в вашей таблице галереи есть дополнительные поля name
и state
:
select g.gallery_id, g.name, g.state, i.num_pictures, j.sum_vote_values
from gallery g
inner join (
select g.gallery_id, count(p.picture_id) as 'num_pictures'
from gallery g
left join picture p on g.gallery_id = p.picture_gallery_ref
group by g.gallery_id) as i on g.gallery_id = i.gallery_id
left join (
select g.gallery_id, sum(v.vote_value) as 'sum_vote_values'
from gallery g
left join vote v on g.gallery_id = v.vote_gallery_ref
group by g.gallery_id
) as j on g.gallery_id = j.gallery_id
Это даст набор результатов, который выглядит следующим образом:
gallery_id, name, state, num_pictures, sum_vote_values
1, 'Gallery A', 'NJ', 4, 19
2, 'Gallery B', 'NY', 3, 32
3, 'Empty gallery', 'CT', 0,