Хорошие у меня есть проблема с консультацией, которая я хочу достать ставку успеха каждого рабочего, консультация, которая у меня есть, - следующая:
SELECT
trabajadores.*,
tiR.nombre AS docu_revisar_tipos_documento,
doc1.archivo AS docu_revisar_archivo,
doc1.estado AS docu_revisar,
tiC.nombre AS docu_contrato_tipos_documento,
doc2.archivo AS docu_contrato_archivo,
doc2.estado AS docu_contrato,
tiAC.nombre AS docu_anexo_contrato_tipos_documento,
doc3.archivo AS docu_anexo_contrato_archivo,
doc3.estado AS docu_anexo_contrato,
tiEM.nombre AS docu_evalu_medica_tipos_documento,
doc4.archivo AS docu_evalu_medica_archivo,
doc4.estado AS docu_evalu_medica,
tiEP.nombre AS docu_entre_epp_tipos_documento,
doc5.archivo AS docu_entre_epp_archivo,
doc5.estado AS docu_entre_epp,
tiRI.nombre AS docu_ri_tipos_documento,
doc6.archivo AS docu_ri_archivo,
doc6.estado AS docu_ri,
tiCO.nombre AS docu_co_tipos_documento,
doc7.archivo AS docu_co_archivo,
doc7.estado AS docu_co,
tiRUT.nombre AS docu_rut_tipos_documento,
doc8.archivo AS docu_rut_archivo,
doc8.estado AS docu_rut,
SUM(CASE WHEN doc1.estado = 4 THEN 1 ELSE 0 END)+SUM(CASE WHEN doc2.estado = 4 THEN 1 ELSE 0 END)+SUM(CASE WHEN doc3.estado = 4 THEN 1 ELSE 0 END)+SUM(CASE WHEN doc4.estado = 4 THEN 1 ELSE 0 END)+SUM(CASE WHEN doc5.estado = 4 THEN 1 ELSE 0 END)+SUM(CASE WHEN doc6.estado = 4 THEN 1 ELSE 0 END)+SUM(CASE WHEN doc7.estado = 4 THEN 1 ELSE 0 END)+SUM(CASE WHEN doc8.estado = 4 THEN 1 ELSE 0 END) total_exitoso,
COUNT(doc1.estado) D1,
COUNT(doc2.estado) D2,
COUNT(doc3.estado) D3,
COUNT(doc4.estado) D4,
COUNT(doc5.estado) D5,
COUNT(doc6.estado) D6,
COUNT(doc7.estado) D7,
COUNT(doc8.estado) D8
FROM
trabajadores
LEFT JOIN trabajadores_documento doc1 ON
trabajadores.id = doc1.fk_id_trabajador AND doc1.fk_id_tipos_documentos = 1
LEFT JOIN trabajadores_documento doc2 ON
trabajadores.id = doc2.fk_id_trabajador AND doc2.fk_id_tipos_documentos = 2
LEFT JOIN trabajadores_documento doc3 ON
trabajadores.id = doc3.fk_id_trabajador AND doc3.fk_id_tipos_documentos = 3
LEFT JOIN trabajadores_documento doc4 ON
trabajadores.id = doc4.fk_id_trabajador AND doc4.fk_id_tipos_documentos = 4
LEFT JOIN trabajadores_documento doc5 ON
trabajadores.id = doc5.fk_id_trabajador AND doc5.fk_id_tipos_documentos = 5
LEFT JOIN trabajadores_documento doc6 ON
trabajadores.id = doc6.fk_id_trabajador AND doc6.fk_id_tipos_documentos = 6
LEFT JOIN trabajadores_documento doc7 ON
trabajadores.id = doc7.fk_id_trabajador AND doc7.fk_id_tipos_documentos = 7
LEFT JOIN trabajadores_documento doc8 ON
trabajadores.id = doc8.fk_id_trabajador AND doc8.fk_id_tipos_documentos = 8
LEFT JOIN tipos_documentos tiR ON
doc1.fk_id_tipos_documentos = tiR.id
LEFT JOIN tipos_documentos tiC ON
doc2.fk_id_tipos_documentos = tiC.id
LEFT JOIN tipos_documentos tiAC ON
doc3.fk_id_tipos_documentos = tiAC.id
LEFT JOIN tipos_documentos tiEM ON
doc4.fk_id_tipos_documentos = tiEM.id
LEFT JOIN tipos_documentos tiEP ON
doc5.fk_id_tipos_documentos = tiEP.id
LEFT JOIN tipos_documentos tiRI ON
doc6.fk_id_tipos_documentos = tiRI.id
LEFT JOIN tipos_documentos tiCO ON
doc7.fk_id_tipos_documentos = tiCO.id
LEFT JOIN tipos_documentos tiRUT ON
doc8.fk_id_tipos_documentos = tiRUT.id
ORDER BY
trabajadores.id
DESC
Который я функционирует хорошо, но всякий раз когда у рабочего есть яркие документы, когда я добавляю, новый рабочий в этом списке не появляется у меня, так как у него нет документов поэтому, должен появляться, чтобы так загружать документы
В следующем соединении они могут видеть функционирование подмостков, которые я использую
http://sqlfiddle.com/#!9/79349d/1
Ставка успеха или cumplimento рабочего, в примере SQL находятся эти колонны:
total_exitoso D1 D2 D3 D4 D5 D6 D7 D8
тогда Ваша ставка успеха должна быть:
total_exitoso/D1,D2,D3, И Т.Д. *100, чтобы так мочь иметь процентное содержание каждого рабочего
Спасибо
SegГєn она conversaciГіn чата https://chat.stackexchange.com / rooms / 91357/query-mysql , я присоединяю ее soluciГіn достигнутая:
SELECT *,fk_id_trabajador,n_completos/n_subidos*100 tasa_exito FROM (
SELECT fk_id_trabajador,COUNT(*) n_subidos
FROM trabajadores_documento
) c1 JOIN (
SELECT fk_id_trabajador,COUNT(*) n_completos
FROM trabajadores_documento WHERE estado=4
) c2 USING(fk_id_trabajador) RIGHT JOIN trabajadores
ON c1.fk_id_trabajador=trabajadores.id;
HabГ-Хозяев, прибывший в другие промежуточные достаточно интересные решения с картезианским продуктом и внешним продуктом, сочетаемым двумя полями:
SELECT *,IFNULL(estado=4,0) exito FROM (
SELECT trabajadores.id id_trabajador,
rut,nombres,apellidos,f_nacimiento,
sexo,tipos_documentos.id id_documento,nombre
FROM trabajadores,tipos_documentos
) c1 LEFT JOIN trabajadores_documento
ON fk_id_trabajador=id_trabajador
AND fk_id_tipos_documentos=id_documento
ORDER BY id_trabajador,id_documento;
, Но это не были искавшее. HabГ - в достаточно крошку...