sql >> Databáze >  >> RDS >> Mysql

Má mysql ekvivalent analytických funkcí Oracle?

jen jsem vám chtěl říct, že můžete použít proměnné v MySQL k napodobení analytických funkcí. SUM OVER lze například provést následovně:


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

Pokud chcete PARTITION BY , je to možné, ale jen trochu složitější. V podstatě přidáte další @variable sledovat účet (nebo cokoli, podle čeho chcete rozdělit), seřadit podle účtu (nebo své proměnné) a poté resetovat @sum při změně účtu. Takto:


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

Všimněte si dvou hlavních změn, které bylo nutné provést, aby se dosáhlo efektu rozdělení:

  1. Hlavní tabulka (tbl ) je uzavřena v dílčím výběru s ORDER BY doložka. To je nutné, protože když MySQL přejde k provedení @account testování proměnných hodnoty je třeba již objednat. Pokud by se tak nestalo, dostali byste nesprávné hodnoty součtů i hodnoty účtu.

  2. Existuje sloupec 'extra' s aliasem as _ . Tento sloupec můžete při používání výsledků ignorovat, ale pořadí @account kontrola a změna musí být za @sum zkontrolovat a změnit.

    Také se můžete rozhodnout změnit pořadí sloupců, pokud vám nevadilo, že účet je poslední. To se provede odebráním prvního account protože se duplikuje s posledním _ a poté zjevně přejmenoval alias _ na account .

Zdroje:



  1. Používání ODBC se Salesforce a Okta Single Sign On (SSO)

  2. Jak formátovat data v Oracle

  3. Domovská stránka Oracle pouze pro čtení

  4. Dell Boomi