sql >> Databáze >  >> RDS >> Mysql

Jak seskupit podle roku a měsíce v MySQL

Tento dotaz spočítá všechny řádky a také pouze řádky, kde Attribute není null, seskupení podle roku a měsíce v řádcích:

SELECT
  Year(`date`),
  Month(`date`),
  Count(*) As Total_Rows,
  Count(`Attribute`) As Rows_With_Attribute
FROM your_table
GROUP BY Year(`date`), Month(`date`)

(to proto, že Count(*) počítá všechny řádky, Count(Attibute) počítá všechny řádky, kde atribut není null)

Pokud potřebujete svou tabulku v PIVOTu, můžete to použít k počítání pouze řádků, kde atribut není null:

SELECT
  Year(`date`),
  Count(case when month(`date`)=1 then `Attribute` end) As Jan,
  Count(case when month(`date`)=2 then `Attribute` end) As Feb,
  Count(case when month(`date`)=3 then `Attribute` end) As Mar,
  ...
FROM your_table
GROUP BY Year(`date`)

A toto pro počítání všech řádků:

SELECT
  Year(`date`),
  Count(case when month(`date`)=1 then id end) As Jan,
  Count(case when month(`date`)=2 then id end) As Feb,
  Count(case when month(`date`)=3 then id end) As Mar,
  ...
FROM your_table
GROUP BY Year(`date`)

(nebo místo ID počítání můžete použít Sum(Month( datum)=1) jako v Kanderově odpovědi). Samozřejmě můžete oba dotazy spojit do tohoto:

SELECT
  Year(`date`),
  Count(case when month(`date`)=1 then id end) As Jan_Tot,
  Count(case when month(`date`)=1 then `Attribute` end) As Jan_Attr,
  Count(case when month(`date`)=2 then id end) As Feb_Tot,
  Count(case when month(`date`)=2 then `Attribute` end) As Feb_Attr,
  Count(case when month(`date`)=3 then id end) As Mar_Tot,
  Count(case when month(`date`)=3 then `Attribute` end) As Mar_Attr,
  ...
FROM your_table
GROUP BY Year(`date`)


  1. Je možné vynutit kontrolu dat v MySQL pomocí regulárního výrazu

  2. MySQL, kde JSON obsahuje prázdné pole

  3. Jak najít počet a jména různých znaků v řetězci v PL/SQL

  4. Oznámení SQL Server Query v JAVA