Помогите с SQL запросом .

php5

Новичок
Помогите с SQL запросом .

Есть 3 табл. USER с полями id_user , name ; BONUS с полями id_user , bonus_size; BONUS_CH с полями id_user , bonus_ch_size . Необходимо в одном запросе для каждого user-a вывести его данные , в данном случае только name , а так же посчитать сумму bonus_size и bonus_ch_size .
 

php5

Новичок
попробывал сделать так:
select id_user,user_name,sum(BONUS.bonus_size), sum(BONUS_CH.bonus_ch_size)
from user
left join BONUS on user.id_user = bonus.id_user
left join BONUS_CH on user.id_user = BONUS_CH.id_user
group by id_user
но результат получаю не верный, где косяк ?
 

Dl

Новичок
Напиши запрос без сумм и группировки, увидишь, где повторы
 

php5

Новичок
повторы идут по полям BONUS_CH.bonus_ch_size и BONUS.bonus_size добавил в их в group by т.е теперь он выглядит так :
select id_user,user_name,sum(BONUS.bonus_size), sum(BONUS_CH.bonus_ch_size)
from user
left join BONUS on user.id_user = bonus.id_user
left join BONUS_CH on user.id_user = BONUS_CH.id_user
group by id_user, BONUS.bonus_size,BONUS_CH.bonus_ch_size
но теперь сумма не считается
 

Dl

Новичок
Ну, во-первых, какой смысл группировать по полям, которые требуется посчитать в сумме?
Потом, если для id_user=1 есть bonus_size 2 и 3, bonus_ch_size 4 и 5, то что будет после джойна?
Правильно,
1 2 4
1 2 5
1 3 4
1 3 5
Вот тут и возникает вопрос, что делать. Если есть уверенность, что значения уникальные - то можно использовать distinct. А если нет, то может есть смысл сделать (или найти) дополнительную связь?

-~{}~ 06.12.08 00:14:

Или сделать
select id_user,user_name,
(select sum(bonus_size) from BONUS where bonus.id_user=user.id_user),
(select sum(bonus_ch_size) from BONUS_CH where BONUS_CH.id_user= user.id_user) from user
 

php5

Новичок
тут мне еще подкинули 2-й вариант

select s.id_user
, s.user_name
,max(s.total_bonus_size) total_bonus_size
,sum(BONUS_CH.BONUS_CH.bonus_ch_size) total_bonus_ch_size
from
(select user.id_user
,user.user_name
,sum(BONUS.bonus_size) total_bonus_size
from user
left join BONUS on user.id_user = bonus.id_user
group by user.id_user,user.user_name
) s
left join BONUS_CH on s.id_user = BONUS_CH.id_user
group by s.id_user,s.user_name

Так вот меня интересует какой запрос предпочтительней использовать ?
 
Сверху