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

Урок за данни:Използване на функциите на прозореца

Какво представляват функциите на прозореца?

Функциите на прозореца позволяват на потребителите да извършват изчисления спрямо дялове (т.е. подгрупи или секции) на набор от резултати, обикновено таблица или резултати от друга заявка. За разлика от традиционните функции за агрегиране, които връщат само една стойност за всяка група, дефинирана в заявката, функциите на прозореца връщат една стойност за всеки входен ред.

Как са полезни функциите на прозореца?

Функциите на прозореца повишават ефективността и намаляват сложността на заявките, които анализират дялове (прозорци) на набор от данни, като предоставят алтернатива на по-сложните SQL концепции, напр. производни заявки. Често срещаните случаи на употреба включват:

  • Резултати от класиране в рамките на конкретен прозорец (напр. класиране по група)
  • Достъп до данни от друг ред в конкретен прозорец (напр. отчитане за периоди)
  • Агрегиране в конкретен прозорец (напр. текущи суми):

Как да използвате функциите на прозореца

Функциите на прозореца се инициират с OVER клауза и са конфигурирани с помощта на три концепции:

  • прозоречен дял (PARTITION BY ) - групира редовете в дялове
  • подреждане на прозорците (ORDER BY ) - дефинира реда или последователността на редовете във всеки прозорец
  • прозоречна рамка (ROWS ) - дефинира прозореца чрез използване на отместване от посочения ред

Преглед на синтаксиса

function (expression) OVER
     ( [ PARTITION BY expression_list ]
       [ ORDER BY order_list ]
       [ ROWS frame_clause ])

Дефиниции

  • expression_list:разделен със запетая списък с изрази, обикновено имена на колони
  • order_list:разделен със запетая списък с изрази, обикновено имена на колони
  • frame_clause:дефинирайте отместването с помощта на CURRENT ROW , _value_ PRECEDING , UNBOUNDED PRECEDING , _value_ FOLLOWING , UNBOUNDED FOLLOWING

Примери

Класиране:класиране по група

SELECT
      campaign
    , month
    , total_cost
    , rank() OVER (PARTITION BY month ORDER BY month DESC, total_cost DESC) as "rank"
FROM Cost_by_Month
LIMIT 8

Предишен ред:анализ на период над период

SELECT
      campaign
    , month
    , total_cost
    , LAG(total_cost, 1) OVER (ORDER BY campaign, month) as "previous total cost"
FROM Cost_by_Month
WHERE campaign = 'TV'
LIMIT 4

Агрегация в рамките на прозорец:текущи суми

SELECT
    campaign, month, monthly_cost
  , sum(monthly_cost) OVER (PARTITION BY campaign ORDER BY month ROWS BETWEEN UNBOUNDED
    PRECEDING and CURRENT ROW) as "running cost total"
FROM Cost_by_Month

Списък с документация и функции:

Моля, имайте предвид, че съществуват фини разлики в употребата и синтаксиса от база данни до база данни. За информация, специфична за вашата реализация, моля, използвайте специфичната за източника документация, предоставена по-долу.

Postgres

  • Урок
  • Функции

Червено отместване

  • Урок
  • Функции

Oracle

  • Урок

SQLServer

  • Урок

BigQuery

  • Урок

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да намерите максималната стойност на числова колона в SQL

  2. SQL HAVING клауза за начинаещи

  3. Как да използвате AI за настройка на SQL за истински автоматизиран процес

  4. Мигриране на данни с помощта на Network_link

  5. Извършване на одит на промените в данните с помощта на временна таблица