0
votes

Sélectionnez deux sommes avec différentes conditions MySQL

J'ai une table DB "entrées" avec des journaux de temps des employés.

SELECT 
  MONTH(FROM_UNIXTIME(logged_at)), 
  YEAR(FROM_UNIXTIME(logged_at)), 
  SUM(hours)
FROM dpd_harvest_entries
GROUP BY 
  MONTH(FROM_UNIXTIME(logged_at)), 
  YEAR(FROM_UNIXTIME(logged_at))


0 commentaires

3 Réponses :


0
votes

Je suppose que vous avez des tâches code> avec la colonne facturable code> qui détient 1 pour les tâches facturables et 0 pour des tâches non facturables. Ensuite, votre requête pourrait ressembler à:

SELECT 
  MONTH(FROM_UNIXTIME(logged_at)), 
  YEAR(FROM_UNIXTIME(logged_at)),
  SUM(hours) total,
  SUM(IF(task_id IN ({your id list}),hours,0)) billable,
  SUM(IF(task_id IN ({your id list}),0,hours)) nonbillable
FROM dpd_harvest_entries e
GROUP BY 
  MONTH(FROM_UNIXTIME(logged_at)), 
  YEAR(FROM_UNIXTIME(logged_at))


0 commentaires

0
votes

Cela devrait fonctionner ..

select a.month, a.year, (billable + non_billable) total, billable, non_billable
from (select month, year, sum(hours) billable
      from dpd_harvest_entries
      where task_id in (2, 3)
      group by month, year) a,
     (select month, year, sum(hours) non_billable
      from dpd_harvest_entries
      where task_id in (1))
      group by month, year) b
where a.month = b.month
and a.year = b.year


0 commentaires

0
votes

Vous auriez besoin de 2 sous-titres (facturables et non facturables), avez un mois d'année de colonne dans les deux, puis rejoignez-les dans votre colonne de mois d'année pour les réunir, quelque chose comme ceci:

SELECT 
billable.year_month as year_month,
billable.sum_hours as billable_hours,
non_billable.sum_hours as non_billable_hours,
(billable.sum_hours + non_billable.sum_hours) as total_hours

FROM (SELECT 
DATE_FORMAT(FROM_UNIXTIME(logged_at), '%Y-%m') as year_month,
SUM(hours) as sum_hours
FROM dpd_harvest_entries
WHERE task_id IN (1,2,3)
GROUP BY
1) as billable,

(SELECT 
DATE_FORMAT(FROM_UNIXTIME(logged_at), '%Y-%m') as year_month,
SUM(hours) as sum_hours
FROM dpd_harvest_entries
WHERE task_id IN (4,5,6)
GROUP BY
1) as non_billable

LEFT JOIN billable on billable.year_month = non_billable.year_month


0 commentaires