Podsumuj Grupowanie według roku i miesiąca

Mam arkusz z dwoma polami:

mydate      | amount
2009-01-01  | 10.00
2009-01-02  | 13.00
2009-02-01  | 11.00
2009-02-05  | 12.00
2009-02-08  | 52.00

Chcę mieć w innym arkuszu MonthSum który wyświetla sumy danych w kolumnie amount pogrupowane według roku+miesiąca w kolumnie Data :

mydate      | amount
2009-01     | 23.00
2009-02     | 75.00

Nie chcę określać komórek, w których arkusz kalkulacyjny ma sumować, chcę ogólną formułę grupującą moje dane na miesiąc+rok. Gdybym był na bazie MySQL to po prostu bym zrobił:

SELECT DATE_FORMAT('%Y-%m', mydate), SUM(amount) 
FROM mytable GROUP BY DATE_FORMAT('%Y-%m', mydate)

Potrzebuję rozwiązania do pracy nad Arkusze Kalkulacyjne Google .

Myślę, że możliwe rozwiązania to użycie SUMIF lub pivot tables lub Google Spreadsheets QUERY function .

Author: pnuts, 2011-09-06

5 answers

Możesz to zrobić za pomocą formuły tablicy, ja umieszczam formułę w A2 i w A1, wpisuję numer miesiąca:

=ARRAYFORMULA(SUMPRODUCT(1*(MONTH(Sheet1!$A$2:$A$6)=A1)*Sheet1!$B$2:$B$6))

Zobacz doc w działaniu w arkuszu kalkulacyjnym Google

[edytuj] jeśli chcesz rok i miesiąc:

=ARRAYFORMULA(SUMPRODUCT(1*(YEAR(Sheet1!$A$2:$A$8)=A2)*(MONTH(Sheet1!$A$2:$A$8)=B2)*Sheet1!$B$2:$B$8))
 29
Author: JMax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-06 14:31:39

Do tego służą tabele przestawne .

Stworzyłem przykład używając Twoich danych.

Najpierw dodaj kolumnę, aby sformatować datę jako ciąg miesięczny, np. "2009-01" ze wzorem:

TEXT(A2, "YYYY-MM")

Tutaj wpisz opis obrazka


Następnie zaznacz Dane i wybierz" dane " > " raport tabeli przestawnej..."

Tutaj wpisz opis obrazka


Dla wierszy wybierz "miesiąc"

Tutaj wpisz opis obrazka


Dla wartości wybierz "kwota"

Tutaj wpisz opis obrazka


TADA! To jest to!

Tutaj wpisz opis obrazka

Aby uzyskać szybki przegląd tabel przestawnych, zobacz ten wpis na blogu Google .

 87
Author: matt burns,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-19 04:27:29

Oprócz wkładu JMax, pozwól, że przedstawię następującą formułę za pomocą funkcji zapytania ...

=query(index('Sheet3'!A:B); "select year(Col1)+(month(Col1)+1)/100,sum(Col2) where Col1 is not null group by year(Col1)+(month(Col1)+1)/100 label year(Col1)+(month(Col1)+1)/100 'mydate',sum(Col2) 'amount' ")

Przypisy: Założyłem, że oryginalne dane są w arkuszu 3 a mój wynik przedstawia zestawienie roku i miesiąca yyyy.mm zamiast RRRR-mm Stworzyłem ilustrację:

yogi

 11
Author: Yogi Anand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-08 03:32:34

Odpowiedź Matta Burnsa i Cœura jest dość dokładna i chciałbym dodać komentarz (nie dodałem go do sekcji komentarzy, ponieważ jest dość długi)

Możesz użyć tej formuły zamiast: DATE(YEAR(A2);MONTH(A2);1) do grupowania według roku i miesiąca.

W ten sposób zachowasz wartości jako daty i będziesz mógł zastosować dowolny rodzaj formatowania daty lub sortowania w tabeli przestawnej.


Wyjaśnienie można pominąć:

Zamiast TEXT(A2, "YYYY-MM") konwertuje wartość w tekście i w związku z tym pozbawienie wolności o dalszej manipulacji datą.

DATE(YEAR(A2);MONTH(A2);1) Usuń dzień i godzinę Z daty, więc na przykład 2018/05/03 oraz 2018/05/06 oboje stają się 2018/05/01 która nadal jest datą, którą można następnie pogrupować.

Stosując format" RRRR-MM " bezpośrednio na tabeli przestawnej uzyskujesz ten sam wynik.

 1
Author: user1707414,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-01 20:35:42

Pracowałem nad podobnym problemem. Znalazłem, że ta formuła działa dobrze.

=SUMIF(ARRAYFORMULA(MONTH('Sheet1'!A:A)), A2, 'Sheet1'!B:B)

W komórce A2 wkładam miesiąc, który chciałem

 0
Author: kalm42,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-24 03:12:36