Database
 sql >> база данни >  >> RDS >> Database

Как да групирате по година в T-SQL

Проблем:

Искате да групирате данните си по години.

Пример I:

Една от колоните във вашите данни е transaction_date . Съдържа дата. Искате да групирате всичките си данни по години и да изчислите общите пари, спечелени всяка година.

data таблицата изглежда така:

transaction_date пари
25-03-2018 1700
12.09.2019 100
14.07.2018 1200
2018-01-05 400
2019-06-08 2000
2020-03-06 1500

Решение 1 (показване на годината и спечелените пари):

SELECT
  YEAR(transaction_date) AS year,
  SUM(money) AS money_earned
FROM data
GROUP BY YEAR(transaction_date);

Резултатът е:

година печелени_пари
2020 1500
2019 2100
2018 3300

Решение 2 (показване на пълната дата, годината и парите, спечелени през съответната година):

SELECT
  transaction_date AS transaction_date,
  YEAR(transaction_date) AS year,
  SUM(money) OVER(PARTITION BY YEAR(transaction_date)) AS money_earned
FROM data;

Резултатът е:

transaction_date година печелени_пари
25-03-2018 2018 3300
14.07.2018 2018 3300
2018-01-05 2018 3300
12.09.2019 2019 2100
2019-06-08 2019 2100
2020-03-06 2020 1500

Дискусия:

В този пример се приема, че нямате колоната за годината. Имате колоната с пълни дати и искате да извлечете годината от нея.

За да извлечете година от датата в SQL Server, можете да използвате YEAR() функция. Аргументът на тази функция трябва да бъде дата – тук transaction_date колона.

Ако искате да покажете годината и общите пари, спечелени през тази година, можете да използвате GROUP BY . Първата избрана колона е годината, извлечена от датата. Втората колона е агрегатната функция SUM(money) . В края на заявката се нуждаете от GROUP BY YEAR(transaction_date) . Оттук решение 1.

Ако искате да покажете повече колони, използвайте функция на прозорец (Решение 2). След SUM(money) пишете OVER() клауза и, тъй като искате да групирате по всяка година, използвайте PARTITION BY YEAR(transaction_date) вътре в него. Имайте предвид, че все още нямате year колона при отчитане на сумата, така че PARTITION BY година няма да работи. Можете да прочетете повече за функциите на прозореца тук.

Пример II:

Една от колоните във вашите данни е year . Искате да групирате всичките си данни по тази колона и да изчислите общите спечелени пари всяка година.

data таблицата изглежда така:

година месец ден пари
2018 3 25 1700
2019 9 12 100
2018 7 14 1200
2018 1 5 400
2019 6 8 2000
2020 3 6 1500

Решение 1 (показване на годината и спечелените пари):

SELECT
  year,
  SUM(money) AS money_earned
FROM data
GROUP BY year;

Резултатът е:

година печелени_пари
2020 1500
2018 3300
2019 2100

Решение 2 (показва година, месец, ден и парите, спечелени през съответната година):

SELECT
  year,
  month,
  day,
  SUM(money) OVER(PARTITION BY year) AS money_earned
FROM data;

Резултатът е:

година месец ден печелени_пари
2018 3 25 3300
2018 7 14 3300
2018 1 5 3300
2019 9 12 2100
2019 6 8 2100
2020 3 6 1500

Дискусия

В този пример се предполага, че вече имате year колона.

Ако искате да покажете само годината и общите пари, спечелени през тази година, просто GROUP BY е достатъчно. Ако не се чувствате комфортно с концепцията за GROUP BY, вижте тук, където я обясняваме. Вие просто използвате агрегатната функция (тук:SUM ) с правилната колона и в края на заявката групирате по year . Можете да преименувате колоната с помощта на AS ключова дума с ново име. Освен това, ако искате данните да бъдат сортирани по година, използвайте ORDER BY година в края на вашата заявка.

По-сложно е, ако искате да покажете и някои други колони. След това се нуждаете от решението с помощта на функция прозорец (Решение 2). Трябва да използвате агрегатната функция със съответната колона (SUM(money)). ) и напишете OVER() клауза след това. В тази клауза трябва да използвате PARTITION BY с колоната, по която искате да групирате. Така получавате:

SUM(money) OVER(PARTITION BY year)

В това решение не използвате GROUP BY клауза.

Можете да прочетете повече за функциите на прозореца тук.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Архивиране само на база данни в WHM

  2. Съображения за производителност на управляван екземпляр на Azure SQL

  3. Опции за настройка на производителността на базата данни на Azure SQL

  4. Модел на база данни за онлайн проучване. Част 2

  5. Как работи моделът на услугата PAAS?