¿Todo eso en una sola sentencia SQL?, bueno, veamos. Hay que hacerlo en partes, al menos dos partes.
La estructura de las tablas es la siguiente:
Código :
operarios
id nombre preciohoras
1 Operario 1 10
2 Operario 2 10
3 Operario 3 20
4 Operario 4 20
5 Operario 5 15
6 Operario 6 10
trabajosoperarios
id_operario horas
4 3
2 5
2 1
2 0.5
4 4
Primero hay que obtener la cantidad de horas trabajadas por cada operario:
Código MySQL :
SELECT `id_operario`, SUM(`horas`) AS `horastrabajadas`
FROM `trabajosoperarios`
GROUP BY `id_operario`
Teniendo este dato, se puede asociar el resultado de esta consulta con la tabla que contiene el precio por hora de cada operario:
Código MySQL :
SELECT *
FROM `operarios`,
(
SELECT `id_operario`, SUM(`horas`) AS `horastrabajadas`
FROM `trabajosoperarios`
GROUP BY `id_operario`
) AS `operarios_horastrabajadas`
WHERE
`operarios`.`id` = `operarios_horastrabajadas`.`id_operario`
No es exactamente lo que se necesita, pero es muy simple obtener el total en $$$ de las horas trabajadas:
Código MySQL :
SELECT *, (`operarios_horastrabajadas`.`horastrabajadas`*`operarios`.`preciohoras`) AS `total`
FROM `operarios`,
(
SELECT `id_operario`, SUM(`horas`) AS `horastrabajadas`
FROM `trabajosoperarios`
GROUP BY `id_operario`
) AS `operarios_horastrabajadas`
WHERE
`operarios`.`id` = `operarios_horastrabajadas`.`id_operario`
Ahora solamente tienes que recorrer la tabla resultante de esta consulta e ir sumando la columna `total`.