Duda consulta MYSQL

thelegend

Buenas a todos!

Estoy creando una consulta y la verdad.. que no entiendo porque no me sale.. a ver si me podéis dar una ayudita :/

SELECT , COUNT(Tecnics_has_Partes.Partes_id_parte) as numero_de_partes ,
SEC_TO_TIME(SUM(TIME_TO_SEC(hores)*COUNT(Tecnics_has_Partes.Partes_id_parte))) AS horas_torales,
FROM Partes INNER join Tecnics_has_Partes on Tecnics_has_Partes.Partes_id_parte = Partes.id_parte
GROUP BY Partes.id_parte
HAVING COUNT(Tecnics_has_Partes.Partes_id_parte) > 1

Tengo partes con horas, pero hay partes con varios técnicos, esto se refleja en la tabla Tecnics_has_Partes,que es una tabla intermedia, así pues si sumo las horas del parte multiplicado por el contador de la tabla intermedia, tendré las horas totales, pero me da el error: "Invalido uso de función en grupo", pero la verdad no entiendo como solucionarlo...
Saludos!

Troyer

La estructura de las tablas como es? Cual es el resultado que esperas?

Usa la etiqueta code para poner SQL.

Tienes esto, verdad?

/*
|--------------------------------------------------------------------------
| Parte
|--------------------------------------------------------------------------
|
| Id
| Horas
| 
*/

/*
|--------------------------------------------------------------------------
| Tecnics_has_Partes
|--------------------------------------------------------------------------
|
| Id
| Id_parte
| Id_tecnic
| 
*/

/*
|--------------------------------------------------------------------------
| Tecnic
|--------------------------------------------------------------------------
|
| Id
| 
*/
Vedrfolnir

Has probado a agrupar en el group by por Tecnics_has_Partes.Partes_id_parte en lugar de por Partes.id_parte?
Me suena que ese error es cuando o te faltan datos por los que agrupar en el group by, o porque no es el campo que tiene que ser para que haga correctamente la agrupación

B

GROUP BY numero_de_partes , horas_torales

Troyer

#1 Si tienes la estructura que te dije arriba con esto te vale, si es correcto te lo explico:

SELECT 
COUNT(tp.id_parte) as 'Partes totales',
SUM(p.horas) as 'Horas totales', 
t.id 
FROM tecnic t 
JOIN Tecnics_has_Partes tp ON (t.id = tp.id_tecnic) 
JOIN Parte p ON (p.id = tp.id_parte) 
GROUP BY t.id 
richmonde

#1 Troyer te lo explicará :P

Pero un consejo, intenta hacer las consultas con formato correcto, tabulando cuando toque, y con friendly naming de las tablas y columnas. Usa alias, porque más adelante, te saldrán cosas más complejas, mucho más complejas.

1
thecaballero

#1 Tienes mal puesto el group by

Select b.campo_id_trabajador, Count(a.id_parte), SUM("no se donde estan las horas")
FROM Partes a, tecnics_has_partes b
WHERE a.id_parte = b.partes_id_parte
Group by b.campo_id_trabajador

Usuarios habituales