2 votes

Puis-je obtenir un ratio à partir d'une sélection en SQL ?

Je réviserai la question avec un nom approprié une fois que je serai certain de la manière de communiquer ce que je veux.

J'ai une table appelée batch_log dans laquelle les personnes démarrent et arrêtent le travail sur un lot. Chaque entrée ressemble à ceci :

"id";"batch_id";"userid";"start_time";"end_time";"time_elapsed"
"99980";"cd9e4c9e-d8bb-4983-64f4-4e777b451b93";"phastie";"2011-09-22 08:54:34";"2011-09-22 10:07:07";"01:12:33"

Ce que je veux vraiment faire, c'est sélectionner, pour une personne donnée, le temps qu'elle a suivi par rapport au temps total de ce lot, afin que je puisse lui accorder un crédit pour la partie du temps estimé qui lui revient. Y a-t-il un moyen de faire cela en SQL ?

EDIT[J'ai fini par faire ce qui suit :]

SELECT user_time_by_batch.batch_id, userid, user_time_by_batch / total_time_by_batch FROM
(
  SELECT SUM(time_elapsed) user_time_by_batch, userid, batch_id
  FROM batch_log
  Where start_time between "2011-08-01" and now()
  and end_time is not null and time_elapsed BETWEEN "00:00:00" AND "10:00:00"
    and batch_id not in ("-1", "-2", "-3", "-4", "-5", "-6", "-7", "-8", "-9", "-10", "-11", "-12", "-13")
  GROUP BY batch_id, userid
) user_time_by_batch
INNER JOIN 
(
  SELECT SUM(time_elapsed) total_time_by_batch, batch_id
  FROM batch_log
  Where start_time between "2011-08-01" and now() 
    and end_time is not null and time_elapsed BETWEEN "00:00:00" AND "10:00:00"
    and batch_id not in ("-1", "-2", "-3", "-4", "-5", "-6", "-7", "-8", "-9", "-10", "-11", "-12", "-13")

  GROUP BY batch_id
) total_time_by_batch
ON user_time_by_batch.batch_id = total_time_by_batch.batch_id

2voto

beon Points 397

Ceci devrait vous donner ce dont vous avez besoin

SELECT user_id, user_time_by_batch / total_time_by_batch FROM
(
  SELECT SUM(time_elapsed) user_time_by_batch, user_id, batch_id
  FROM batch_log
  GROUP BY batch_id, user_id
) user_time_by_batch
INNER JOIN 
(
  SELECT SUM(time_elapsed) total_time_by_batch, batch_id
  FROM batch_log
  GROUP BY batch_id
) total_time_by_batch
ON user_time_by_batch.batch_id = total_time_by_batch.batch_id

1voto

Marc B Points 195501
select batch_id, userid, SUM(end_time - start_time) AS total_user_contribution
FROM batch_log
GROUP BY batch_id, userid

permet d'obtenir les contributions individuelles des utilisateurs par lot. Pour obtenir la durée totale d'un lot, vous pouvez soit additionner les contributions individuelles lorsque vous récupérez les données de la requête ci-dessus, soit exécuter une requête distincte pour calculer la somme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X