Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

ΠžΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ T-SQL

Π’ истории ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ стандарта ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Microsoft SQL Server Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ:

Π’ SQL Server 2005 Π±Ρ‹Π»Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π’ SQL Server 2012 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±Ρ‹Π»Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π°.

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ с ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡΠΌΠΈ Π² SQL Server 2012, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ достаточно ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠΉ. Π’ этом нСбольшом руководствС я расскаТу ΠΊΠ°ΠΊ ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² SQL Server, Ρ‚Π°ΠΊ ΠΈ ΠΎ стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, которая Π² этом сСрвСрС отсутствуСт. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, упоминая Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, я Π±ΡƒΠ΄Ρƒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, поддСрТиваСтся Π»ΠΈ ΠΎΠ½Π° Π² SQL Server, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² ΠΊΠ°ΠΊΠΎΠΉ вСрсии появилась эта ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°.

Π‘ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° появлСния ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² SQL Server 2005 я ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ всС Ρ‡Π°Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡ своих Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Π― ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡Π½ΠΎ замСняю старыС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ классичСскиС, Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ конструкции языка, Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΎΠΊΠΎΠ½Π½Ρ‹ΠΌΠΈ функциями. А Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ удаСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ эффСктивно. Π­Ρ‚ΠΎ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ своих Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… запроса Π΄Π°Π½Π½Ρ‹Ρ…, я Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’Π°ΠΊΠΆΠ΅ стандартныС SQL-систСмы ΠΈ рСляционныС систСмы управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (Π Π‘Π£Π‘Π”) всС большС двиТутся Π² сторону аналитичСских Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΠΈ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π°ΠΆΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ этой Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠ½Π΅ каТСтся, Ρ‡Ρ‚ΠΎ ΠΎΠΊΠΎΠ½Π½Ρ‹ΠΌ функциям ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ Π² области запроса Π΄Π°Π½Π½Ρ‹Ρ… срСдствами SQL Server, Π° врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π½Π° ΠΈΡ… ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅, Π½Π΅ ΠΏΡ€ΠΎΠΏΠ°Π΄Π΅Ρ‚ зря.

Π’ этом руководствС ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассказываСтся ΠΎΠ± ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… функциях, ΠΈΡ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ… для получСния Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΈΡ… основС.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Учимся ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

ΠžΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” это ΠΌΠΎΡ‰Π½Π΅ΠΉΡˆΠΈΠΉ инструмСнт Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ с Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ мноТСство Π·Π°Π΄Π°Ρ‡.

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ произвСсти вычислСниС Π½Π°Π΄ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ строк, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π²Π°ΠΌ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ΠΈ.

МоТно ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΈΡ… с Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹ΠΌΠΈ функциями, Π½ΠΎ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈ использовании ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ нСсколько строк Π½Π΅ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΎΠ΄Π½Ρƒ, Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. ΠŸΡ€ΠΈ этом Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ просто Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅ ΠΊΠ°ΠΊ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅. Π­Ρ‚ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½ для построСния аналитичСских ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ², расчСта ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ срСднСго ΠΈ Π½Π°Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΈΡ‚ΠΎΠ³ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ для расчСтов Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π£ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ вопрос – Β«Π§Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅?Β»

ΠŸΡ€ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ запросС, всС мноТСство строк обрабатываСтся ΠΊΠ°ΠΊ Π±Ρ‹ Π΅Π΄ΠΈΠ½Ρ‹ΠΌ Β«Ρ†Π΅Π»ΡŒΠ½Ρ‹ΠΌ куском», для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π°Π³Ρ€Π΅Π³Π°Ρ‚Ρ‹. А ΠΏΡ€ΠΈ использовании ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, запрос дСлится Π½Π° части (ΠΎΠΊΠ½Π°) ΠΈ ΡƒΠΆΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… частСй ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ свои Π°Π³Ρ€Π΅Π³Π°Ρ‚Ρ‹.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

Бинтаксис

Окно опрСдСляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ инструкции OVER(). Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим синтаксис этой инструкции:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊ ΠΏΠΎΠ²Π΅Π΄Π΅Ρ‚ сСбя мноТСство строк ΠΏΡ€ΠΈ использовании Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. А Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΡƒΠ΄Π΅ΠΌ Π½Π° простой Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΠ΅ содСрТащСй Π΄Π°Ρ‚Ρƒ, ΠΊΠ°Π½Π°Π» с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈ количСство конвСрсий:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

ΠžΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ OVER() ΠΈ просуммируСм столбСц Β«ConversionsΒ»:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

ΠœΡ‹ использовали ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ OVER() Π±Π΅Π· ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ Ρ‚Π°ΠΊΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΎΠΊΠ½ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ вСсь Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ никакая сортировка Π½Π΅ примСняСтся. Появился Π½ΠΎΠ²Ρ‹ΠΉ столбСц Β«SumΒ» ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки выводится ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 14. Π­Ρ‚ΠΎ сквозная сумма всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Β«ConversionsΒ».

PARTITION BY

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ PARTITION BY, которая опрСдСляСт столбСц, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈ являСтся ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½Π°Π±ΠΎΡ€Π° строк Π½Π° ΠΎΠΊΠ½Π°:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ PARTITION BY сгруппировала строки ΠΏΠΎ полю Β«DateΒ». Π’Π΅ΠΏΠ΅Ρ€ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ рассчитываСтся своя сумма Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ столбца Β«ConversionsΒ».

ORDER BY

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠΊΠ½Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ORDER BY:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

К ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡŽ PARTITION BY добавилось ORDER BY ΠΏΠΎ полю Β«MediumΒ». Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ сумму Π½Π΅ всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΎΠΊΠ½Π΅, Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния Β«ConversionsΒ» сумму со всСми ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ посчитали Π½Π°Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΈΡ‚ΠΎΠ³.

ROWS ΠΈΠ»ΠΈ RANGE

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ROWS позволяСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ строки Π² ΠΎΠΊΠ½Π΅, указывая фиксированноС количСство строк, ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ RANGE, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ROWS, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ со строками, Π° с Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ строк Π² инструкции ORDER BY. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠΉ строкой для RANGE ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ нСсколько физичСских строк ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΏΠΎ Ρ€Π°Π½Π³Ρƒ.

ОбС инструкции ROWS ΠΈ RANGE всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ вмСстС с ORDER BY.

Π’ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ для ограничСния строк ROWS ΠΈΠ»ΠΈ RANGE Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова:

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС сумма рассчитываСтся ΠΏΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ячСйкС Π² ΠΎΠΊΠ½Π΅. А послСдняя строка Π² ΠΎΠΊΠ½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ столбСц Β«ConversionsΒ», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ большС Π½Π΅ с Ρ‡Π΅ΠΌ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ.

ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΎΠ³Π½Π°Ρ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ΄ Π²Π°ΡˆΡƒ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ.

Π’ΠΈΠ΄Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

ΠžΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π³Ρ€ΡƒΠΏΠΏΡ‹:

Π’ ΠΎΠ΄Π½ΠΎΠΉ инструкции SELECT с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ FROM ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сразу нСсколько ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΈ пройдСмся ΠΏΠΎ основным функциям.

АгрСгатныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

АгрСгатныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ – это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π½Π° Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… арифмСтичСскиС вычислСния ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ инструкциСй OVER:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

Π Π°Π½ΠΆΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π Π°Π½ΠΆΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ – это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π½ΠΆΠΈΡ€ΡƒΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Π² ΠΎΠΊΠ½Π΅. НапримСр, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ порядковый Π½ΠΎΠΌΠ΅Ρ€ строкС ΠΈΠ»ΠΈ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ смСщСния

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ смСщСния – это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ строкам Π² ΠΎΠΊΠ½Π΅, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строки, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ значСниям Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΎΠΊΠ½Π°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

АналитичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

АналитичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ распрСдСлСнии Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для статистичСского Π°Π½Π°Π»ΠΈΠ·Π°.

Π’Π°ΠΆΠ½ΠΎ! Π£ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ PERCENTILE_CONT ΠΈ PERCENTILE_DISC, столбСц, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ сортировка, указываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова WITHIN GROUP.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

КСйс. МодСли Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ

Благодаря ΠΌΠΎΠ΄Π΅Π»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ обоснованно ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Π²ΠΊΠ»Π°Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π² достиТСниС конвСрсии. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π²Π΅ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π£ нас Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π° с id посСтитСля (ΠΈΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Client ID, Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° ΠΈ Ρ‚ΠΏ.), Π΄Π°Ρ‚Π°ΠΌΠΈ ΠΈ количСством посСщСний сайта, Π° Ρ‚Π°ΠΊΠΆΠ΅ с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ достигнутых конвСрсиях.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠ»ΠΈΠΊ

Π’ Google Analytics стандартной модСлью Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ являСтся послСдний нСпрямой ΠΊΠ»ΠΈΠΊ. И Π² Π΄Π°Π½Π½ΠΎΠΌ случаС 100% цСнности конвСрсии присваиваСтся послСднСму ΠΊΠ°Π½Π°Π»Ρƒ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ взаимодСйствий.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ модСль ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° 100% цСнности конвСрсии присваиваСтся ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΊΠ°Π½Π°Π»Ρƒ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ FIRST_VALUE.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

Рядом со столбцом Β«MediumΒ» появился Π½ΠΎΠ²Ρ‹ΠΉ столбСц Β«First_ClickΒ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠ°Π½Π°Π» Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈΠ²Π΅Π΄ΡˆΠΈΠΉ посСтитСля ΠΊ Π½Π°ΠΌ Π½Π° сайт ΠΈ вся Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π°Ρ‡Ρ‚Π΅Π½Π° Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠ°Π½Π°Π»Ρƒ.

ΠŸΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅ΠΌ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΡŽ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡ‚Ρ‡Π΅Ρ‚.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

Π‘ ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ давности взаимодСйствий

Π’ этом случаС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ: Ρ‡Π΅ΠΌ Π±Π»ΠΈΠΆΠ΅ ΠΊ конвСрсии находится Ρ‚ΠΎΡ‡ΠΊΠ° взаимодСйствия, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ†Π΅Π½Π½ΠΎΠΉ ΠΎΠ½Π° считаСтся. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ эту модСль ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ DENSE_RANK.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

Рядом со столбцом Β«MediumΒ» появился Π½ΠΎΠ²Ρ‹ΠΉ столбСц Β«RanksΒ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½ Ρ€Π°Π½Π³ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Π² зависимости ΠΎΡ‚ близости ΠΊ Π΄Π°Ρ‚Π΅ конвСрсии.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ этот запрос для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π²Π½ΡƒΡŽ 1 (100%) ΠΏΠΎ всСм Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ Π½Π° ΠΏΡƒΡ‚ΠΈ ΠΊ конвСрсии.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

Рядом со столбцом Β«MediumΒ» появился Π½ΠΎΠ²Ρ‹ΠΉ столбСц Β«Time_DecayΒ» с распрСдСлСнной Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ.

И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΡŽ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»Π°ΡΡŒ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΠΊΠ°Π½Π°Π»Π°ΠΌ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

Из ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅Π³ΠΎΡΡ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ самым вСсомым ΠΊΠ°Π½Π°Π»ΠΎΠΌ являСтся ΠΊΠ°Π½Π°Π» Β«cpcΒ», Π° ΠΊΠ°Π½Π°Π» Β«cpaΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ стандартной ΠΌΠΎΠ΄Π΅Π»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΠΈ, Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» свою долю ΠΏΡ€ΠΈ распрСдСлСнии цСнности.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ – Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ T-SQL программист. Π§Π°ΡΡ‚ΡŒ 1.

Π•Ρ‰Π΅ Π² Microsoft SQL Server 2005 появился интСрСсный Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» – ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ вычислСния Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ строк Π²Π½ΡƒΡ‚Ρ€ΠΈ прСдлоТСния Select. Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π½Π΅ сталкивался с этими функциями Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос – Β«Π§Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅?Β». Окно – Π·Π½Π°Ρ‡ΠΈΡ‚ Π½Π°Π±ΠΎΡ€ строк, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ происходит вычислСниС. Оконная функция позволяСт Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ вСсь Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΊΠ½Π°.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, всС Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π±Π΅Π· Π½ΠΈΡ…. Однако ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ большим прСимущСством ΠΏΠ΅Ρ€Π΅Π΄ рСгулярными Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹ΠΌΠΈ функциями: Π½Π΅Ρ‚ Π½ΡƒΠΆΠ΄Ρ‹ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… для расчСтов., Ρ‡Ρ‚ΠΎ позволяСт ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всС строки Π½Π°Π±ΠΎΡ€Π° с ΠΈΡ… ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ. ΠŸΡ€ΠΈ этом Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ просто Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅ ΠΊΠ°ΠΊ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅.

ОсновноС прСимущСство использования ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π°Π΄ рСгулярными Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹ΠΌΠΈ функциями Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ приводят ΠΊ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ строк Π² ΠΎΠ΄Π½Ρƒ строку Π²Ρ‹Π²ΠΎΠ΄Π°, строки ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ свои ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, Π° Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ добавляСтся ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС.

Окно опрСдСляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструкции OVER(). Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим синтаксис этой инструкции:

Оконная функция (столбСц для вычислСний) OVER ([PARTITION BY столбСц для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ] [ORDER BY столбСц для сортировки] [ROWS ΠΈΠ»ΠΈ RANGE Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для ограничСния строк Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π³Ρ€ΡƒΠΏΠΏΡ‹])

АссортимСнт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΡ‹ рассмотрим Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части ΡΡ‚Π°Ρ‚ΡŒΠΈ. Π‘ΠΊΠ°ΠΆΡƒ лишь, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½Π°: Π°Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅, Ρ€Π°Π½ΠΆΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅, смСщСния.

Для дСмонстрации Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π½Π° тСстовой Ρ‚Π°Π±Π»ΠΈΡ†Π΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΊΠΎΠ½ (SQLΡ‹ Π±Π»ΠΎΠΊΠΎΠ²

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ строк, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΎΠΊΠ½ΠΎΠΌ, ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Π½Π° основС Π³Ρ€ΡƒΠΏΠΏΡ‹ строк. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΊΠΎΠ½ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π·Π°Π΄Π°Ρ‡, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ вычислСниС ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ срСднСго, ВычислСниС совокупной статистики ΠΈΠ»ΠΈ доступ ΠΊ значСниям строк ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ полоТСнию Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строки.

Бинтаксис

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

function

Ѐункция, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π°Ρ Π² ΠΎΠΊΠ½Π΅. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ классы Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ спСцификаций ΠΎΠΊΠ½Π°.

Если ΡƒΠΊΠ°Π·Π°Π½ΠΎ, window_spec Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ORDER BY, Π½ΠΎ Π½Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ window_frame.

Если ΡƒΠΊΠ°Π·Π°Π½ΠΎ, функция Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°.

window_spec

Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ опрСдСляСт, ΠΊΠ°ΠΊ Π±ΡƒΠ΄ΡƒΡ‚ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ строки, отсортированы Π²Π½ΡƒΡ‚Ρ€ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ строки Π² сСкции, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ функция.

Одно ΠΈΠ»ΠΈ нСсколько Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для указания Π³Ρ€ΡƒΠΏΠΏΡ‹ строк, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅ΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ функция. Если ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ PARTITION Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, БСкция состоит ΠΈΠ· всСх строк.

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ORDER BY Π·Π°Π΄Π°Π΅Ρ‚ порядок строк Π² сСкции.

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Frame Window ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π΅ подмноТСство строк Π² сСкции, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ функция Aggregate ΠΈΠ»ΠΈ Analytics.

Π’ качСствС псСвдонима для ORDER BY ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ SORT.

МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ псСвдонима для Ρ€Π°Π·Π΄Π΅Π»Π°. CLUSTER ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС псСвдонима для PARTITION BY ΠΏΡ€ΠΈ отсутствии прСдлоТСния ORDER BY.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Oracle

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π₯Π°Π±Ρ€! Π’ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π³Π΄Π΅ я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ, часто проходят (Π·Π° ΠΌΠ°Ρ‚ ΠΈΠ·Π²ΠΈΠ½ΠΈΡ‚Π΅) ΠΌΠΈΡ‚Π°ΠΏΡ‹. На ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ… выступал ΠΌΠΎΠΉ ΠΊΠΎΠ»Π»Π΅Π³Π° с Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠΌ ΠΎΠ± ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… функциях ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ… Oracle. Π­Ρ‚Π° Ρ‚Π΅ΠΌΠ° показалась ΠΌΠ½Π΅ стоящСй Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎ Π½Π΅ΠΉ пост.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

Π‘ самого Π½Π°Ρ‡Π°Π»Π° Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Oracle прСдставлСн ΠΊΠ°ΠΊ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ язык SQL. Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡ… примСнСния подходят ΠΊΠΎ всСму сСмСйству SQL (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ понимаСтся здСсь ΠΊΠ°ΠΊ структурированный язык запросов) ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΊΠΎ всСм запросам с ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠ°ΠΌΠΈ Π½Π° синтаксис ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ языка.

Π’ΡΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ я ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΈ доступно ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Π² Π΄Π²ΡƒΡ… частях. ΠŸΠΎΡΡ‚ скорСС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ. ΠšΠΎΠΌΡƒ интСрСсно β€” Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.

Π§Π°ΡΡ‚ΡŒ 1: прСдлоТСния Order by, Group by, Having

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ сортировкС β€” Order by, Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ΅ β€” Group by, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ β€” Having ΠΈ ΠΎ ΠΏΠ»Π°Π½Π΅ запроса. Но ΠΎΠ±ΠΎ всСм ΠΏΠΎ-порядку.

Order by

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Order by выполняСт сортировку Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‚.Π΅. сортируСт ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ столбцу. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΡƒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎ псСвдониму столбца, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ Order by Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ ΠΊ числовым, ΠΈ ΠΊ строковым столбцам. Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Π΅ столбцы ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ примСняСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ столбцы ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ DESC.

SELECT column1, column2, … (ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅)
FROM table_name
ORDER BY column1, column2… ASC|DESC;

Π”Π°Π²Π°ΠΉΡ‚Π΅ всС рассмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…:
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ всС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ сортируСм ΠΈΡ… ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ ΠΏΠΎ столбцу ID.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ всС Π΄Π°Π½Π½Ρ‹Π΅. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠΎ столбцу ID ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово DESC.

Π’ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСсколько ΠΏΠΎΠ»Π΅ΠΉ для сортировки. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΈΠ΄Π΅Ρ‚ сортировка ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»Ρƒ. ΠŸΡ€ΠΈ равСнствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° для ΠΏΠΎΠ»Π΅ΠΉ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΎΡ‚Π΄Π΅Π»ΠΎΠΌ примСняСтся Π²Ρ‚ΠΎΡ€ΠΎΠ΅ условиС сортировки; Π² нашСм случаС β€” это Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°.

ВсС довольно просто. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ условия сортировки, Ρ‡Ρ‚ΠΎ позволяСт Π±ΠΎΠ»Π΅Π΅ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ списки.

Group by

Π’ SQL ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Group by собираСт Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΠ°Ρ…. Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° раздСляСт всС Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° логичСскиС Π½Π°Π±ΠΎΡ€Ρ‹, Ρ‡Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ статистичСскиС вычислСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅.

Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для объСдинСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ»ΠΈ нСскольким столбцам. ПослС Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° запись для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния, использованного Π² столбцС.

Π‘ использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° SQL Group by тСсно связано использованиС Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ SQL Having. АгрСгатная функция Π² SQL β€” это функция, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π½Π°Π±ΠΎΡ€Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ столбца. НапримСр: COUNT(), MIN(), MAX(), AVG(), SUM()

SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);

Group by стоит послС условного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° WHERE Π² запросС SELECT. По ТСланию ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ORDER BY, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ значСния.

Π˜Ρ‚Π°ΠΊ, ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ сотрудников ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡ‚Π΄Π΅Π»Π°. Π’ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»Π° ΠΈ максимальная Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°.

РСшСниС 1 (Π±Π΅Π· использования Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ):

РСшСниС 2 (с использованиСм Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ):

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ€Π΅ΡˆΠ°Π΅ΠΌ Π·Π°Π΄Π°Ρ‡Ρƒ Π±Π΅Π· использования Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π½ΠΎ с использованиСм подсСлСкта, Ρ‚.Π΅. Π² ΠΎΠ΄ΠΈΠ½ сСлСкт Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΡƒ.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡˆΠ΅Π» ΠΊΠΎΡ€ΠΎΡ‡Π΅ ΠΈ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Π΅Π΅, хотя выполняСт Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ.

Как Ρƒ нас Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Group by: сначала Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ Π΄Π²Π° ΠΎΡ‚Π΄Π΅Π»Π° Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹ qa ΠΈ dev. ΠŸΠΎΡ‚ΠΎΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… ΠΈΡ‰Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ.

Having

Having это инструмСнт Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ. Он ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Having ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² SQL Ρ‚Π°ΠΌ, Π³Π΄Π΅ нСльзя ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ WHERE.

Если ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ WHERE опрСдСляСт ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ строк, Ρ‚ΠΎ Having ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ послС Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ для опрСдСлСния Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π°, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΏΠΎ значСниям Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏ строк.

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΎΡ‚Π΄Π΅Π»Ρ‹ со срСднСй Π·Π°Ρ€ΠΏΠ»Π°Ρ‚ΠΎΠΉ большС 4000. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ.

РСшСниС 1 (бСз использования GROUP BY и HAVING):

РСшСниС 2 (с использованиСм GROUP BY и HAVING):

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Π²Π° подсСлСкта: ΠΎΠ΄ΠΈΠ½ для нахоТдСния максимальной Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹, Π΄Ρ€ΡƒΠ³ΠΎΠΉ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ срСднСй Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π²Ρ‹ΡˆΠ΅Π» Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Π΅Π΅.

План запроса

НСрСдко Π±Ρ‹Π²Π°ΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° запрос Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄ΠΎΠ»Π³ΠΎ, потрСбляя Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы памяти ΠΈ дисков. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ запрос Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄ΠΎΠ»Π³ΠΎ ΠΈ нСэффСктивно, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΠ»Π°Π½ запроса.

План запроса β€” это ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠ»Π°Π½ выполнСния запроса, Ρ‚.Π΅. ΠΊΠ°ΠΊ Π‘Π£Π‘Π” Π±ΡƒΠ΄Π΅Ρ‚ Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ. Π‘Π£Π‘Π” Ρ€Π°ΡΠΏΠΈΡˆΠ΅Ρ‚ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… подзапроса. ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π² всС, ΠΌΡ‹ смоТСм ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π³Π΄Π΅ Π² запросС слабыС мСста ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ»Π°Π½Π° запроса смоТСм ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ….

ИсполнСниС любого SQL прСдлоТСния Π² Oracle ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ β€œΠΏΠ»Π°Π½ исполнСния”. Π­Ρ‚ΠΎΡ‚ ΠΏΠ»Π°Π½ исполнСния запроса являСтся описаниСм Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Oracle Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ…, согласно исполняСмому SQL ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡŽ. План прСдставляСт собой Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит порядок шагов ΠΈ связь ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.

К срСдствам, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠ»Π°Π½ выполнСния запроса, относятся Toad, SQL Navigator, PL/SQL Developer ΠΈ Π΄Ρ€. Они Π²Ρ‹Π΄Π°ΡŽΡ‚ ряд ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ рСсурсоСмкости запроса, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… основными ΡΠ²Π»ΡΡŽΡ‚ΡΡ: cost β€” ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ выполнСния ΠΈ cardinality (ΠΈΠ»ΠΈ rows) β€” ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (ΠΈΠ»ΠΈ количСство строк).

Π§Π΅ΠΌ большС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этих ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‚Π΅ΠΌ ΠΌΠ΅Π½Π΅Π΅ эффСктивСн запрос.

НиТС ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΠ· ΠΏΠ»Π°Π½Π° запроса. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ подсСлСкт, Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ β€” Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ°. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ 22 строки, Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ β€” 15.

Анализ ΠΏΠ»Π°Π½Π° запроса:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

Π•Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ Π°Π½Π°Π»ΠΈΠ· ΠΏΠ»Π°Π½Π° запроса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ примСняСтся Π΄Π²Π° подсСлСкта:
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠ°ΠΊ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ использования срСдств SQL ΠΈ я Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π²Π°ΠΌ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² своих запросах.

ВсС пСрСчислСнныС Π²Ρ‹ΡˆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ упростят Π²Π°ΠΌ Тизнь ΠΏΡ€ΠΈ написании запросов ΠΈ повысят качСство ΠΈ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ вашСго ΠΊΠΎΠ΄Π°.

Π§Π°ΡΡ‚ΡŒ 2: ΠžΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠžΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ появились Π΅Ρ‰Ρ‘ Π² Microsoft SQL Server 2005. Они ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ вычислСния Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ строк Π²Π½ΡƒΡ‚Ρ€ΠΈ прСдлоТСния Select. Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΎ, Ρ‚ΠΎ β€œΠΎΠΊΠ½ΠΎβ€ β€” это Π½Π°Π±ΠΎΡ€ строк, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ происходит вычислСниС. β€œΠžΠΊΠ½ΠΎβ€ позволяСт ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ качСствСнно ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Вакая функция позволяСт Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ вСсь Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΎΠΊΠ½Π°.

ΠžΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌ прСимущСством. НСт нСобходимости Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… для расчСтов, Ρ‡Ρ‚ΠΎ позволяСт ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всС строки Π½Π°Π±ΠΎΡ€Π° с ΠΈΡ… ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ID. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ добавляСтся ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅ Π² Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅.

SELECT column_name(s)
ΠΠ³Ρ€Π΅Π³ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ функция (столбСц для вычислСний)
OVER ([PARTITION BY столбСц для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ]
FROM table_name
[ORDER BY столбСц для сортировки]
[ROWS ΠΈΠ»ΠΈ RANGE Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для ограничСния строк Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π³Ρ€ΡƒΠΏΠΏΡ‹])

OVER PARTITION BY β€” это свойство для задания Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠΊΠ½Π°. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π΄Π°Π²Π°Ρ‚ΡŒ слуТСбныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ строки. Бинтаксис ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вписываСтся прямо Π² Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ столбцов.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим всС Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅: Π² Π½Π°ΡˆΡƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ добавился Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΎΡ‚Π΄Π΅Π», Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 15 строк. ΠœΡ‹ попытаСмся вывСсти Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠΎΠ², ΠΈΡ… Π·/ΠΏ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π·/ΠΏ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql
Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΠΎΠ»Π΅ ΠΌΡ‹ Π±Π΅Ρ€Π΅ΠΌ имя, Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ β€” Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ. Π”Π°Π»ΡŒΡˆΠ΅ ΠΌΡ‹ примСняСм ΠΎΠΊΠΎΠ½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ over(). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Ρ‘ для получСния максимальной Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρ‹ ΠΏΠΎ всСй ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ β€œΠΎΠΊΠ½Π°β€. Over() с пустыми скобками примСняСтся для всСй Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π΅Π·Π΄Π΅ максимальная Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° β€” 10 000. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ дСйствия ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ добавляСтся ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строчкС.

Если ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΉ строки запроса ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚.Π΅. остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ max (salary), Ρ‚ΠΎ запрос Π½Π΅ сработаСт. ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ просто Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ Π±Ρ‹ построчно, ΠΈ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° max (salary) Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ число Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строки, Ρ‚.Π΅. Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠ°. Π’ΠΎΡ‚ Ρ‚ΡƒΡ‚ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ прСимущСство ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со всСм ΠΎΠΊΠ½ΠΎΠΌ ΠΈ со всСми доступными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ вывСсти ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π·/ΠΏ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡ‚Π΄Π΅Π»Π°:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sql

ЀактичСски ΠΌΡ‹ Π·Π°Π΄Π°Π΅ΠΌ Ρ€Π°ΠΌΠΊΠΈ для β€œΠΎΠΊΠ½Π°β€, разбивая Π΅Π³ΠΎ Π½Π° ΠΎΡ‚Π΄Π΅Π»Ρ‹. Π’ качСствС Ρ€Π°Π½ΠΆΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ department. Π£ нас Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΎΡ‚Π΄Π΅Π»Π°: dev, qa ΠΈ sales.

β€œΠžΠΊΠ½ΠΎβ€ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡ‚Π΄Π΅Π»Π°. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ нашло ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Ρƒ сначала для dev, Π·Π°Ρ‚Π΅ΠΌ для qa, ΠΏΠΎΡ‚ΠΎΠΌ для sales. Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ записываСтся Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки.

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π² скобках послС over Π½Π΅ Π±Ρ‹Π»ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ использовали PARTITION BY, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ нашСго ΠΎΠΊΠ½Π°. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π΄ΠΎΠΏ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ слуТСбныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎΠΌΠ΅Ρ€ строки.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

SQL Π½Π΅ Ρ‚Π°ΠΊ прост, ΠΊΠ°ΠΊ каТСтся Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд. ВсС описанноС Π²Ρ‹ΡˆΠ΅ β€” это Π±Π°Π·ΠΎΠ²Ρ‹Π΅ возмоТности ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π‘ ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ β€œΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒβ€ наши запросы. Но Π² Π½ΠΈΡ… скрыто Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π°: Π΅ΡΡ‚ΡŒ слуТСбныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ROWS ΠΈΠ»ΠΈ RANGE), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, добавляя большС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ запросам.

НадСюсь, пост Π±Ρ‹Π» ΠΏΠΎΠ»Π΅Π·Π΅Π½ для всСх ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΠΎΠΉ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *