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

Jak mogę zwrócić dane liczbowe z wykresu pudełkowego wszystkich wyników za pomocą 1 zapytania mySQL?

Znalazłem rozwiązanie w PostgreSQL używając PL/Pythona.

Jednak pozostawiam pytanie otwarte na wypadek, gdyby ktoś inny znalazł rozwiązanie w mySQL.

CREATE TYPE boxplot_values AS (
  min       numeric,
  q1        numeric,
  median    numeric,
  q3        numeric,
  max       numeric
);

CREATE OR REPLACE FUNCTION _final_boxplot(strarr numeric[])
   RETURNS boxplot_values AS
$$
    x = strarr.replace("{","[").replace("}","]")
    a = eval(str(x))

    a.sort()
    i = len(a)
    return ( a[0], a[i/4], a[i/2], a[i*3/4], a[-1] )
$$
LANGUAGE 'plpythonu' IMMUTABLE;

CREATE AGGREGATE boxplot(numeric) (
  SFUNC=array_append,
  STYPE=numeric[],
  FINALFUNC=_final_boxplot,
  INITCOND='{}'
);

Przykład:

SELECT customer_id as cid, (boxplot(price)).*
FROM orders
GROUP BY customer_id;

   cid |   min   |   q1    | median  |   q3    |   max
-------+---------+---------+---------+---------+---------
  1001 | 7.40209 | 7.80031 |  7.9551 | 7.99059 | 7.99903
  1002 | 3.44229 | 4.38172 | 4.72498 | 5.25214 | 5.98736

Źródło:http://www.christian-rossow.de/articles/PostgreSQL_boxplot_mediangre_quartiles_function.php



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje możliwość ANY_VALUE dla mysql 5.6?

  2. Czy kopiowanie katalogu /var/lib/mysql jest dobrą alternatywą dla mysqldump?

  3. Wybierz i wyświetl tylko zduplikowane rekordy w MySQL

  4. Wyszukaj tekst w polach w każdej tabeli bazy danych MySQL

  5. Jak mogę przekonwertować tę instrukcję SQL na Django QuerySet?