Ir para conteúdo
Fórum Script Brasil
  • 0

Tabela de produtividade


Tchello

Pergunta

Tenho em uma tabela um quadro de serviços para vários funcionários, preciso uma consulta onde traga o nome do funcionário, a quantidade de serviços encaminhado para cada um, a quantidade de servicos executados por cada um e a porcentagem de execução pelo total encaminhado.

Segue exemplo de como devo mostrar isso na tela:

FUNCIONARIO | QTDE SERV | EXECUTADOS | %

Jose Silva 100 95 95%

Carlo Filho 100 98 98%

Desde já agradeço a colaboração.

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0
Como está a tabela no banco de dados?

FUNCIONARIO | SERVICO | EXECUTADO

Jose Silva Manut Sim

Jose Silva Manut Sim

Jose Silva Manut não

Jose Silva Manut Sim

Jose Silva Manut não

Carlos Filho Manut não

Carlos Filho Manut não

Carlos Filho Manut não

Carlos Filho Manut Sim

Carlos Filho Manut Sim

Ex. do print:

FUNCIONARIO | TOTAL DE SERV | EXECUTADOS | %

Jose Silva | 5 | 3 | 60%

Carlos Filho | 5 | 2 | 40%

Link para o comentário
Compartilhar em outros sites

  • 0

Nãi sei se dá pra fazer com apenas um query... dependendo do caso...

1 - Busca todos os resultados agrupados por usuário:

SELECT *, COUNT(*) reg_user FROM tabela GROUP BY nome HAVING reg_user > 0

No caso "reg_user" vai ter o total de serviços, joga isso no laço e ai faz a mesma busca, só que com WHERE = nome do usuario e executado SIM ou NÃO.

Como você vai ter o total de serviços, basta saber quantos foram ou não executados que você já vai ter a parte contrário...

Link para o comentário
Compartilhar em outros sites

  • 0
Nãi sei se dá pra fazer com apenas um query... dependendo do caso...

1 - Busca todos os resultados agrupados por usuário:

SELECT *, COUNT(*) reg_user FROM tabela GROUP BY nome HAVING reg_user > 0

No caso "reg_user" vai ter o total de serviços, joga isso no laço e ai faz a mesma busca, só que com WHERE = nome do usuario e executado SIM ou NÃO.

Como você vai ter o total de serviços, basta saber quantos foram ou não executados que você já vai ter a parte contrário...

Não consegui fazer a consulta...

Poderia me explicar melhor?

Ex. tenho 20000 servicos cadastrados para 150 tecnicos.

nome | serv | executado

tec1 | manut | sim

tec1 | manut | sim

tec1 | manut | sim

tec1 | manut | sim

tec1 | manut | sim

tec1 | manut | não

tec1 | manut | não

tec1 | manut | não

tec1 | manut | não

tec1 | manut | não

tec2 | manut | sim

tec2 | manut | sim

tec2 | manut | sim

tec2 | manut | sim

tec2 | manut | sim

tec2 | manut | não

tec2 | manut | não

tec2 | manut | não

tec2 | manut | não

tec2 | manut | não

aí faço a seguinte chamada:

$sql = "SELECT nome COUNT(servico) FROM tabela GROUP BY nome";

E me retorna o print:

tec1 = 10 servicos

tec2 = 10 servicos

Até aí tudo ok.

Porém gostaria de saber como faço para que na consulta me traga qtos servicos foram executados e qtos não.

Ex.:

nome | servicos | executados | não executados

tec1 10 5 5

tec2 10 5 5

Grato

Link para o comentário
Compartilhar em outros sites

  • 0

Questão básica de lógica, atualmente você tem o técnico e a quantidade de serviço, então dentro do laço você faz outra query, busca o técnico e quantos serviços foram ou não prestados

$sql = "SELECT nome COUNT(servico) FROM tabela WHERE nome='nome do tecnico' AND executado = 'não' GROUP BY nome";

No caso peguei os não executados, no caso basta subtrair o total dos não executados e você terá os executados...

Link para o comentário
Compartilhar em outros sites

  • 0
Questão básica de lógica, atualmente você tem o técnico e a quantidade de serviço, então dentro do laço você faz outra query, busca o técnico e quantos serviços foram ou não prestados

$sql = "SELECT nome COUNT(servico) FROM tabela WHERE nome='nome do tecnico' AND executado = 'não' GROUP BY nome";

No caso peguei os não executados, no caso basta subtrair o total dos não executados e você terá os executados...

Ok! mas o meu problema é o seguinte: tenho que montar um ranking dos tecnicos que mais executarão os servicos.

Na forma que você colocou terei que fazer uma query para cada tecnico. Até aí tudo bem.

O problema é fazer o ranking, ex.:

1º tec1 = total 10, executadas 9, não executadas 1, % executadas = 90%

2º tec5 = total 10, executadas 8, não executadas 2, % executadas = 80%

3º tec3 = total 10, executadas 7, não executadas 3, % executadas = 70%

4º tec2 = total 10, executadas 6, não executadas 4, % executadas = 60%

5º tec4 = total 10, executadas 5, não executadas 5, % executadas = 50%

Teria alguma forma de fazer a consulta para todos os tecnicos cadastrados?

Link para o comentário
Compartilhar em outros sites

  • 0

Nesse caso você poderia criar um array multimensional para os resultados...

$dados = array();
$volta = 0;
while(//mysq_fetch_assoc... {

$dados[$volta]['tecnico'] = nome do tecnico;
$dados[$volta]['total_executado'] = total executado;
$dados[$volta]['total_n_executado'] = total não executado;
$volta++;
}

Depois basta você ordenar o array pelo total_executado usando array_multisort (não estou certo se esse seria o melhor mesmo). Após ordenar você usa o foreach para varrer e resgatar tudo... o bom seria fazer isso tudo na query, mas não sei se dá, talvez com subquery...

Link para o comentário
Compartilhar em outros sites

  • 0

Cara...

Sendo esta a estrutura que eu usei aqui, para fazer testes:

CREATE TABLE funcionarios (
  id varchar(10) NOT NULL,
  servico varchar(10) NOT NULL,
  executado enum('Sim','Não') NOT NULL
);
Com, este comando, consegui fazer o que você queria:
SELECT tf.id, COUNT(tf.servico) total, func.exec, (func.exec/COUNT(tf.servico)*100) porcent FROM funcionarios tf INNER JOIN (SELECT id , count(executado) exec FROM funcionarios WHERE executado = 'Sim' GROUP BY id) func ON tf.id = func.id GROUP BY id ORDER BY porcent DESC

Agora é só adaptar pra sua aplicação.

Link para o comentário
Compartilhar em outros sites

  • 0
Cara...

Sendo esta a estrutura que eu usei aqui, para fazer testes:

CREATE TABLE funcionarios (
  id varchar(10) NOT NULL,
  servico varchar(10) NOT NULL,
  executado enum('Sim','Não') NOT NULL
);
Com, este comando, consegui fazer o que você queria:
SELECT tf.id, COUNT(tf.servico) total, func.exec, (func.exec/COUNT(tf.servico)*100) porcent FROM funcionarios tf INNER JOIN (SELECT id , count(executado) exec FROM funcionarios WHERE executado = 'Sim' GROUP BY id) func ON tf.id = func.id GROUP BY id ORDER BY porcent DESC

Agora é só adaptar pra sua aplicação.

Muitissímo Obrigado IkkiNet, funcionou direitinho.

Valeu mesmo, resolveu um problema enorme para mim.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,6k
×
×
  • Criar Novo...