Was soll eine Tabellenkreuzung sein ?
Die Ursache wird hier irgendwo liegen :
'WHERE p.pgid=:pgid AND p.posid=i.position AND i.pagid IN (%s) '
Lasse doch mal die ganzen Summen weg (sprich : Problemstelle verkleinern) und guck, welche Daten dann überhaupt geliefert werden. Ich könnte wetten, daß sie da schon doppelt sind. Insofern wäre es kein Wunder, wenn auch die Summe doppelt wird. 8)