2010-10-17 2 views
1

У меня есть таблица, которая содержит ссылки, которые относятся к другой таблице; и в этой таблице указан столбец с титрами, в котором хранятся значения, набранные int. Для того, чтобы извлечь некоторую общую сумму наряду с индивидуальными значениями я запрашиваю его следующим образом:Извлечь индивидуальные значения вместе с их суммой?

SELECT ip, ammount, (SELECT SUM(ammount) FROM stats WHERE link_id = $link_id) as total_ammount FROM stats WHERE link_id = $link_id 

Вот значение в стате таблице:

stat_id, ip, ammount, link_id 
1, 211.126.197.45, 10, 3 
2, 61.158.167.84, 7, 3 

Итак, мне нужно, чтобы получить полную сумму для LINK_ID вместе с его индивидуальные Ammounts:

$total_ammount == 17; 
$ips[0]['ammount'] == 10; 
$ips[1]['ammount'] == 7; 

что-то в этом роде ... вопрос в том, есть ли в порядке запрос или он может быть лучше (как это сделать лучше)?

+0

"сумма" просто бывает очень распространенная опечатка из слово «Сумма». Но проблем нет. Если вы ошиблись в коде, вы можете или не захотите это исправить. Зависит от того, насколько он будет работать. Однако это может запутать других разработчиков. Или просто положил большую улыбку на их лица. :-) –

ответ

5

Вы можете использовать GROUP BY ... WITH ROLLUP:

SELECT stat_id, SUM(ammount) AS amount 
FROM stats 
WHERE link_id = 3 
GROUP BY stat_id WITH ROLLUP 

Результат:

 
stat_id amount 
1,  10  
2,  7  
NULL, 17  

Или вы можете использовать UNION ALL:

SELECT stat_id, ammount AS amount 
FROM stats 
WHERE link_id = 3 

UNION ALL 

SELECT NULL, SUM(ammount) 
FROM stats 
WHERE link_id = 3