Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy mysql ma odpowiednik funkcji analitycznych Oracle?

chciałem tylko powiedzieć, że w MySQL można używać zmiennych do naśladowania funkcji analitycznych. Na przykład SUM OVER można wykonać w następujący sposób:


SELECT amount, 
    @sum := @sum + amount as sum 
FROM tbl
JOIN (SELECT @sum := 0) s

Jeśli chcesz PARTITION BY , jest to możliwe, ale tylko trochę bardziej skomplikowane. Zasadniczo dodajesz kolejną @variable aby obejrzeć konto (lub cokolwiek, według którego chcesz podzielić), uporządkuj według konta (lub swojej zmiennej), a następnie zresetuj @sum gdy konto się zmieni. W następujący sposób:


SELECT account, 
    amount, 
    (case when @account != account then @sum := amount else @sum := @sum + amount end) as sum,
    (case when @account != account then @account := account else @account end) as _
FROM (SELECT * FROM tbl ORDER BY account)
JOIN (SELECT @sum := 0) s
JOIN (SELECT @account := '') a

Zauważysz dwie główne zmiany, które musiały zostać wprowadzone, aby uzyskać efekt partycji:

  1. Główna tabela (tbl ) jest umieszczony w podmenu z ORDER BY klauzula. Jest to konieczne, ponieważ kiedy MySQL przechodzi do @account testowanie zmiennych wartości muszą być już zamówione. Jeśli tak się nie stanie, otrzymasz nieprawidłowe wartości sum, a także wartości konta.

  2. Istnieje „dodatkowa” kolumna o aliasie as _ . Możesz zignorować tę kolumnę podczas korzystania z wyników, ale kolejność @account sprawdź i zmień musi być po @sum sprawdź i zmień.

    Również dzięki temu możesz zmienić kolejność kolumn, jeśli nie masz nic przeciwko temu, aby konto było ostatnie. Odbywa się to poprzez wyjęcie pierwszego account kolumna, ponieważ duplikuje się z ostatnim _ kolumna, a następnie oczywiście zmieniono nazwę na alias _ na account .

Zasoby:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL JOIN z LIMIT 1 na połączonym stole

  2. Tabele przestawne w MySQL

  3. Wstaw dane do bazy danych MySQL

  4. Samouczek MySQL — przewodnik dla początkujących do nauki MySQL

  5. Błąd klucza obcego MySQL 1005 errno 150 klucz podstawowy jako klucz obcy