MySQL i funkcje okna

30

Wygląda na to, że MySQLnie obsługuje funkcji okna.
Np. Prosty: COUNT(*) OVER() AS cntnie działa.
Nie jestem pewien, czy dotyczy to również wersji komercyjnej (zakładam, że wersja społeczności ma ograniczony podzbiór).
Jeśli nie, w jaki sposób można obejść tę brakującą funkcję?

Cratylus
źródło
3
Edycja społeczności MySQL Server nie jest ograniczonym podzbiorem w żadnym sensownym znaczeniu. Różnice dotyczą dodatków i wtyczek, które nie wpływają na podstawową funkcjonalność.
Michael - sqlbot 17.04.13
Zobacz to obejście tutaj i tutaj
StuartLC
W rzeczywistości MySQL9 obsługuje to. Zamiast tego używam pand, które są do bani.
Andrew Scott Evans,
1
MySQL 8 obsługuje funkcję okna. Dla odniesienia: dev.mysql.com/doc/refman/8.0/en/window-functions.html
gvgvgvijayan
MySQL obsługuje funkcje okien od wersji 8.0. Ten link może pomóc.
Hamid Mohayeji

Odpowiedzi:

36

MySQL nie obsługuje funkcji okien (*). Istnieje coś, co nazywamy „funkcją okna biedaka” w postaci GROUP_CONCAT () .

Istnieje wiele sztuczek GROUP_CONCATsłużących do emulacji funkcji okna. Nie są tak ładne (składniowo) i czasami są zbyt ograniczone. Napisałem kilka. Zobacz mój post na blogu narzekający na brakujące funkcje okna i linki do różnych rozwiązań opartych na GROUP_CONCAT.

W szczególności, wybierając konkretne niezagregowane dane kolumn w GROUP BY i SQL: wybierając najwyższe N ​​rekordów na grupę, inne rozwiązanie może być dla Ciebie interesujące i może dać Ci dobry start.

Rzeczy, na które należy zwrócić uwagę GROUP_CONCAT():

  • Można używać DISTINCT
  • Można używać ORDER BY ... ASC/DESC
  • Można ustawić SEPARATOR
  • Jak każda funkcja agregująca - odrzuca wartości NULL; wiele sztuczek na ten temat.

(*) Dodano obsługę funkcji okien w MySQL 8

Shlomi Noach
źródło
MySQL obsługuje funkcje okien od wersji 8
Max
GROUP_CONCAT nie jest funkcją okna, to funkcja zestawu uporządkowanego.
SQLRaptor,
1
@SQLRaptor nikt nie twierdził, że tak jest.
ypercubeᵀᴹ
11

Naprawdę należy zauważyć, że MariaDB 10.2 (wydany w maju 2017 r.) Ma funkcje okien . Z pewnością jest to jedna z możliwości, jeśli potrzebujesz MySQL i funkcji okna.

chx
źródło