Bueno, uno de los problemas que tienes está relacionado con la lógica de las bases de datos, y eso se escapa a veces cuando entras en este territorio sin un poco de formación: Se tiene que aprender por el método prueba/error, y hasta que no deduzcas el error no podrás resolverlo.
El problema es que este tipo de errores es medio evasivo, a veces hasta para los experimentados.
El problema se origina, en esencia, en esta cuestión: Todo usuario tiene o cumple misiones, pero no en todas las misiones declaradas ha habido disparos. Al menos eso es lo que desprende del modelo de datos que posteas.
En tu ejemplo tienes dos tablas, pero se infiere una tercera: Usuarios. Esto es importante porque como la lectura de tablas en las bases de datos es de izquierda a derecha en el FROM, si la primera tabla no tiene referencia a un "nick" en especial, ese no aparecerá en la consulta.
Puntualmente,
si el reporte es sobre los usuarios, deberás usar la tabla primaria como inicial. Luego, a esta tabla se la debe cruzar con las misiones, para establecer qué misiones han tenido los usuarios, y recién allí hacer una cruza con la tabla disparos, porque los disparos se producen en las misiones y no por fuera de ellas.
¿Se comprende?
La idea sería que la consulta base fuese algo así:
Esto debería devolver un listado por usuario de las misiones y de todos los disparos realizados, siendo que si la misión no tuvo disparos aún, ese dato aparecerá como NULL (de allí el LEFT JOIN: todo lo que esté a la izquierda, coincida o no con la tabla derecha que en este caso es "disparos"). Es importante que ese dato aparezca como NULL en esos casos.
Ahora bien, con esta consulta ya podemos afinar: Quieres los usuarios, por misión, cuando la misión es "Partial", sume los puntos totales por disparo, los del "Official 2" y los del resto como uno solo.
Podría ser algo así:
Código MySQL:
Ver original U.nick,
M.mn Mision,
SUM(D.points
) PuntosTotales
,
O bien algo así:
Código MySQL:
Ver original U.nick,
M.mn Mision,
SUM(D.points
) PuntosTotales
, SUM(IF(D.ot
IS NOT NULL AND D.ot
IN ('Official 1', 'Official 1-1', 'Official 2', 'Official 2-2', '111 Sqdn Campaign', 'International', 'International Campaign')), 1, 0) DisparosResto
Creo que podrías probarla, y si no da el resultado esperado podemos afinarla más.