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
3 Réponses :
Utiliser Démo kbd> p> alias de colonne dans la liste Select peut être utilisé dans le groupe en raison de la sortie souhaitée, la valeur de la date de tronçante au mois par
Agrégation conditionnelle Code>:
else 0 code> est important pour obtenir 0 pour null code> cas de retour li>
par code> liste
pour postgres p> li>
to_char (date, 'yyyy-mm') code> est nécessaire p> li>
ul> p>
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 code> représente le modèle pour le numéro de mois de 01 à 12 code>, et c'est utilisé dans TO_CHAR code> 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' code> ou 'yyyy.mm' code> ou 'yyyymm' code> en fonction de votre Affichage du style.
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')
Utiliser l'agrégation conditionnelle (à l'aide du filtre code>) et date_trunc () code>: