0
votes

Compter et ajouter des valeurs distinctes qui se produisent dans certaines dates utilisant PostgreSQL

Utilisation de certains SQL dans les tables d'une base de données, je reçois un résultat comme celui-ci:

id  name    date      present   not present
1   John    2018-05       4           0
2   Mary    2018-05       1           2
3   Jane    2018-05       2           1


0 commentaires

3 Réponses :


1
votes

Utiliser Agrégation conditionnelle : xxx

Démo

  • garder else 0 est important pour obtenir 0 pour null cas de retour
  • alias de colonne dans la liste Select peut être utilisé dans le groupe par liste pour postgres

  • en raison de la sortie souhaitée, la valeur de la date de tronçante au mois par to_char (date, 'yyyy-mm') est nécessaire


2 commentaires

Votre solution a bien fonctionné. J'étudie PostgreSQL en ce moment, je suis beaucoup plus une feuille de calcul ... et je ne peux tout simplement pas deviner quelle partie de ce code est "Sélection de la sélection par mois". Dans ma façon de voir les choses, vous venez de tronquer la date et de la sorte, par magie, SQL comprise par elle-même qu'elle doit agréger chaque date de ce mois et résumer les valeurs. Qu'est-ce que je ne commence pas encore?


Salut @ Andrécarvalho. mm représente le modèle pour le numéro de mois de 01 à 12 , et c'est utilisé dans TO_CHAR Fonction fonction comme la 2e argument pour convertir une valeur de date à Une chaîne, si une partie année incluse, alors vous rencontrez 'AAAYY-MM' ou 'yyyy.mm' ou 'yyyymm' en fonction de votre Affichage du style.



0
votes
select id, name, to_char(date,'YYYY-MM') as date, 
       sum((case when status = 'PRESENT' then 1 end )) present,
       sum((case when status = 'NOT PRESENT' then 1 end )) not_present
  from your_result_table
 group by id, name, to_char(date,'YYYY-MM')

0 commentaires

0
votes

Utiliser l'agrégation conditionnelle (à l'aide du filtre ) et date_trunc () : xxx


0 commentaires