Comment le Groupe par Année et Par Mois dans MySQL
Je voudrais mesurer le nombre de ID et de l'ATTRIBUT de la table source et de présenter les données comme indiqué dans le "Rapport Souhaité" ci-dessous. Je suis de l'utilisation de MySQL.
Source:
ID | DATE | ATTRIBUTE
--------------------------------
1 | 2012-01-14 | XYZ
2 | 2012-03-14 |
3 | 2012-03-15 | XYZ
4 | 2012-04-24 | ABC
5 | 2012-04-10 |
6 | 2012-05-11 | ABC
Rapports:
Compter de l'Attribut
YEAR | JAN | FEB | MAR | APR | MAY | JUN | JUL | AUG | SEP | OCT | NOV | DEC
---------------------------------------------------------------------------
2010 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
2011 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
2012 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
Comte de ID
YEAR | JAN | FEB | MAR | APR | MAY | JUN | JUL | AUG | SEP | OCT | NOV | DEC
---------------------------------------------------------------------------
2010 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
2011 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
2012 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
Pourcentage d'achèvement ( Comte de l'Attribut /Comte de l'ID )
YEAR | JAN | FEB | MAR | APR | MAY | JUN | JUL | AUG | SEP | OCT | NOV | DEC
---------------------------------------------------------------------------
2010 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
2011 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
2012 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
Voici le code que j'ai jusqu'ici. Merci! Et Aussi garder à l'esprit, j'ai besoin d'extraire le Mois à compter de la date de champ dans mes données, mais vous ne savez pas comment. Merci.
SELECT YEAR(document_filing_date),MONTH(document_filing_date),COUNT(aif_id)
FROM (a_aif_remaining)
GROUP BY YEAR(document_filing_date),MONTH(document_filing_date);
Les réponses proposées ne fonctionne pas!! Je ne sais pas pourquoi, voici l'erreur que je reçois:
"#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' COUNT(CASE WHEN MONTH(document_filing_date) = 1 THEN aif_id END) AS Jan, CO' at line 1"
SELECT YEAR(document_filing_date,
COUNT(CASE WHEN MONTH(document_filing_date) = 1 THEN aif_id END) AS Jan,
COUNT(CASE WHEN MONTH(document_filing_date) = 2 THEN aif_id END) AS Feb,
COUNT(CASE WHEN MONTH(document_filing_date) = 3 THEN aif_id END) AS Mar,
COUNT(CASE WHEN MONTH(document_filing_date) = 4 THEN aif_id END) AS Apr,
COUNT(CASE WHEN MONTH(document_filing_date) = 5 THEN aif_id END) AS May,
COUNT(CASE WHEN MONTH(document_filing_date) = 6 THEN aif_id END) AS Jun,
COUNT(CASE WHEN MONTH(document_filing_date) = 7 THEN aif_id END) AS Jul,
COUNT(CASE WHEN MONTH(document_filing_date) = 8 THEN aif_id END) AS Aug,
COUNT(CASE WHEN MONTH(document_filing_date) = 9 THEN aif_id END) AS Sep,
COUNT(CASE WHEN MONTH(document_filing_date) = 10 THEN aif_id END) AS Oct,
COUNT(CASE WHEN MONTH(document_filing_date) = 11 THEN aif_id END) AS Nov,
COUNT(CASE WHEN MONTH(document_filing_date) = 12 THEN aif_id END) AS Dec,
FROM a_aif_remaining
GROUP BY YEAR(document_filing_date);
- Qu'avez-vous essayé?
- J'ai mis à jour la question un tantinet. Vous pouvez voir l'étendue de mes efforts. J'ai les colonnes comme un nombre et non pas "MMM" format et il n'est pas encore regroupés par année. Je veux une matrice.
- vous avez oublié un
)
après Année, c'est pourquoi la proposition de réponse ne fonctionne pas. Ma solution compte la présence d'un attribut (ne pas compter les lignes si l'attribut est null), votre réponse compte de la présence d'un attribut spécifique, il n'est pas clair à partir de votre question de ce que vous êtes vraiment après - Merci. Je suis au bout de 2 choses: (1) le Comte de aif_id (total) et (2) le Comte de la présence de n'importe quelle valeur pour le "attribut" (c'est à dire pas NULL)
- pls voir ma réponse mis à jour
Vous devez vous connecter pour publier un commentaire.
Cette requête compter toutes les lignes, et sera également en compte uniquement les lignes où
Attribute
n'est pas null, le regroupement par année et par mois dans les lignes:(ce parce que Count(*) compte de toutes les lignes, Count(Attribut) compte toutes les lignes où l'Attribut n'est pas null)
Si vous avez besoin de votre table de PIVOT, vous pouvez l'utiliser pour compter uniquement les lignes où l'Attribut n'est pas nulle:
Et ce à compter toutes les lignes:
(ou, au lieu de compter les id, vous pouvez utiliser
Sum(Month(
date)=1)
comme dans la kander de réponse). Bien sûr, vous pouvez combiner les deux requêtes dans ce:date
)=1 alorsAttribute
fin) Comme Jan," je suis en train d'essayer de mesurer le nombre de recrods donc count(id). Mercicase
au lieu deif
ici?Je suis venu avec ce qui suit, mais ont le sentiment qu'il pourrait y avoir un moyen plus efficace d'aller à ce sujet...