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

Как да групирате по месеци в PostgreSQL

Проблем:

Искате да групирате записи по месеци в PostgreSQL база данни.

Пример:

Нашата база данни има таблица с име watch с данни в колоните id , name и production_timestamp .

id име product_timestamp
1 гледайте 2019-03-01 11:45:23
2 умен часовник 2019-09-15 07:35:13
3 интелигентна лента 22.09.2019 17:22:05

Решение:

Можете да използвате DATE_TRUNC() функция за групиране на записи в таблица по месеци.

Ето заявката, която бихте написали:

SELECT 
       DATE_TRUNC('month',production_timestamp)
         AS  production_to_month,
       COUNT(id) AS count 
FROM watch
GROUP BY DATE_TRUNC('month',production_timestamp);

Ето резултата от заявката:

production_to_month брой
2019-03-01 00:00:00 1
2019-09-01 00:00:00 2

Дискусия:

Използвайте DATE_TRUNC() функция, ако искате да извлечете дата или час с определена точност от PostgreSQL база данни. (В нашия пример използвахме месечна точност.)

Тази функция приема два аргумента. Първо, имаме спецификатора на частта за дата (в нашия пример „месец“). Имайте предвид, че спецификаторът е низ и трябва да бъде затворен в кавички.

Вторият аргумент е стойността на времевата марка; това може да бъде израз, връщащ стойност на времеви печат или името на колона с времеви печат. (В нашия пример използваме колоната production_timestamp ).

Функцията DATE_TRUNC() съкраща клеймото за време до дадената точност (в този случай месец). В нашата база данни умният часовник има дата на производство 2019-09-15 07:35:13; след като е съкратен до месечна точност, става 2019-09-01 00:00:00 . Прецизността на ниво месец кара деня да се показва като '01' и времето да се попълни с нули. (Скъсените части за дата (напр. дни, месеци) на клеймото за време се заменят с единици.)

Групирането на записи по месеци е много често в PostgreSQL. В нашия пример броят на продуктите се сумира за всеки месец. (COUNT() агрегатната функция отчита броя на продуктите). Ако групирате записи с помощта на агрегатна функция, трябва да използвате клаузата GROUP BY. След клаузата GROUP BY трябва да поставите колоните или изразите, използвани с агрегатната функция в оператора SELECT. (В нашия пример това е DATE_TRUNC( 'month', production_timestamp) .)

Разбира се, не е нужно да използвате DATE_TRUNC() функция само за групиране на записи. Можете също да го използвате, за да получите първия ден от месеца за дадена дата.

За всеки часовник, нека получим името и датата на производство до месец точност – не е необходимо групиране. Ето заявката, която бихте написали:

SELECT name,
       DATE_TRUNC('month',production_timestamp)
         AS  production_to_month
FROM watch;

Ето резултата:

name production_to_month
гледайте 2019-03-01 00:00:00
умен часовник 2019-09-01 00:00:00
интелигентна лента 2019-09-01 00:00:00

В тази заявка функцията DATE_TRUNC() съкращава клеймото за време до месечна точност. В нашата база данни умният часовник има дата на производство '2019-09-15 07:35:13'; сега е '2019-09-01 00:00:00' , което е първият ден от месеца.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да вмъкна обновяем запис с колона JSON в PostgreSQL с помощта на JOOQ?

  2. Разрешаване на нула в уникална колона

  3. Сравняване на балансьори на натоварване за PostgreSQL

  4. PostgreSQL v13 Разгръщане и мащабиране с ClusterControl 1.8.2

  5. Как да търсите конкретна стойност във всички таблици (PostgreSQL)?