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

Prosty sposób na obliczenie mediany za pomocą MySQL

W MariaDB / MySQL:

SELECT AVG(dd.val) as median_val
FROM (
SELECT d.val, @rownum:[email protected]+1 as `row_number`, @total_rows:[email protected]
  FROM data d, (SELECT @rownum:=0) r
  WHERE d.val is NOT NULL
  -- put some where clause here
  ORDER BY d.val
) as dd
WHERE dd.row_number IN ( FLOOR((@total_rows+1)/2), FLOOR((@total_rows+2)/2) );

Steve Cohen zwraca uwagę, że po pierwszym przejściu @rownum będzie zawierało całkowitą liczbę wierszy. Można to wykorzystać do określenia mediany, więc nie jest potrzebne drugie przejście ani łączenie.

Również AVG(dd.val) i dd.row_number IN(...) służy do prawidłowego utworzenia mediany, gdy liczba rekordów jest parzysta. Rozumowanie:

SELECT FLOOR((3+1)/2),FLOOR((3+2)/2); -- when total_rows is 3, avg rows 2 and 2
SELECT FLOOR((4+1)/2),FLOOR((4+2)/2); -- when total_rows is 4, avg rows 2 and 3

Wreszcie MariaDB 10.3.3+ zawiera funkcję MEDIAN



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 10 powodów, aby trzymać się MySQL

  2. Pobieranie połączonej listy w bazie danych MySQL

  3. Jak usunąć wszystkie zduplikowane rekordy w tabeli MySQL bez tabel tymczasowych?

  4. Tworzenie aplikacji internetowej od podstaw przy użyciu Python Flask i MySQL:część 4

  5. Jak wyświetlić wiersze tabeli z bazy danych (php)