Fondamentalement, j'ai un tableau similaire à celui-ci:
time.....activities.....length
13:00........3.............1
13:15........2.............2
13:00........3.............2
13:30........1.............1
13:45........2.............3
13:15........5.............1
13:45........1.............3
13:15........3.............1
13:45........3.............2
13:45........1.............1
13:15........3.............3
Quelques notes:
La requête devrait retourner:
time........count
13:00.........2
13:15.........2
13:30.........0
13:45.........1
Fondamentalement, pour chaque heure unique, je veux un décompte du nombre de lignes où la valeur des activités est 3.
Alors je peux dire:
At 13:00 there were X amount of activity 3s.
At 13:45 there were Y amount of activity 3s.
Ensuite, je veux un compte pour l'activité 1, 2, 4 et 5. afin que je puisse tracer la distribution pour chaque temps unique.
Oui, vous pouvez utiliser group by
:
select time, activities, count(*) from table group by time, activities;
select time, coalesce(count(case when activities = 3 then 1 end), 0) as count
from MyTable
group by time
Sortie:
| TIME | COUNT |
-----------------
| 13:00 | 2 |
| 13:15 | 2 |
| 13:30 | 0 |
| 13:45 | 1 |
Si vous voulez compter toutes les activités dans une requête, vous pouvez faire:
select time,
coalesce(count(case when activities = 1 then 1 end), 0) as count1,
coalesce(count(case when activities = 2 then 1 end), 0) as count2,
coalesce(count(case when activities = 3 then 1 end), 0) as count3,
coalesce(count(case when activities = 4 then 1 end), 0) as count4,
coalesce(count(case when activities = 5 then 1 end), 0) as count5
from MyTable
group by time
L'avantage de ce regroupement par activités est qu'il renvoie 0, même s'il n'y a aucune activité de ce type pour ce segment temporel.
Bien entendu, cela ne renverra pas de lignes pour les segments temporels sans activité d'aucun type. Si vous en avez besoin, vous devrez utiliser une jointure gauche avec une table répertoriant tous les segments temporels possibles.
Si je comprends votre question, cela fonctionnerait-il? (vous devrez remplacer par vos noms de colonnes et de tables actuels)
SELECT time_col, COUNT(time_col) As Count
FROM time_table
GROUP BY time_col
WHERE activity_col = 3
Vous devriez changer la requête en:
SELECT time_col, COUNT(time_col) As Count
FROM time_table
WHERE activity_col = 3
GROUP BY time_col
Cette vl fonctionne correctement.