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

Mysql има ли еквивалента на аналитичните функции на Oracle?

просто исках да ви кажа, че можете да използвате променливи в MySQL, за да имитирате аналитични функции. SUM OVER, например, може да се направи по следния начин:


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

Ако искате да PARTITION BY , възможно е, но е малко по-сложно. По принцип добавяте още един @variable за да гледате акаунта (или каквото искате да разделите), подредете по акаунт (или вашата променлива) и след това нулирайте @sum когато акаунтът се промени. Както следва:


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

Ще забележите две основни промени, които трябваше да се направят, за да се постигне ефектът на дяла:

  1. Основната таблица (tbl ) е обвито в подизбиране с ORDER BY клауза. Това е необходимо, защото когато MySQL отиде да направи @account тестване на променлива, стойностите вече трябва да бъдат поръчани. Ако това не се случи, ще получите неправилни стойности на сумата, както и стойности на акаунта.

  2. Има „допълнителна“ колона с псевдоним as _ . Можете да игнорирате тази колона, когато използвате резултати, но реда на @account проверката и промяната трябва да са след @sum проверете и сменете.

    Освен това с това можете да изберете да пренаредите колоните си, ако нямате нищо против акаунтът да е последен. Това става чрез премахване на първия account колона, тъй като се дублира с последния _ колона и след това очевидно преименува псевдонима _ към account .

Ресурси:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 1064 грешка в CREATE TABLE ... TYPE=MYISAM

  2. Достъпът е отказан за потребител 'root'@'localhost' (използвайки парола:ДА) (Mysql::Error)

  3. Rails 3 ActiveRecord:Подреждане по брой на асоцииране

  4. показване на данни от SQL база данни в php/html таблица

  5. Най-добрият тип поле на база данни за URL