Comment calculer la médiane dans AWS Redshift?
La plupart des bases de données ont une fonction intégrée pour le calcul de la médiane, mais je ne vois rien pour la médiane dans Amazon Redshift.
Vous pouvez calculer la médiane à l'aide d'une combinaison de la nth_value() et count() des fonctions analytiques, mais qui semble janky. Je serais très surpris si un analytics db n'ont pas une méthode intégrée pour le calcul de la médiane, donc je suis en supposant que je suis absent quelque chose.
http://docs.aws.amazon.com/redshift/latest/dg/r_Examples_of_NTH_WF.html
http://docs.aws.amazon.com/redshift/latest/dg/c_Window_functions.html
OriginalL'auteur tayl0rs | 2014-01-07
Vous devez vous connecter pour publier un commentaire.
Et de 2014-10-17, Redshift prend en charge la MÉDIANE fonction de fenêtre:
select distinct médiane(champ) sur () à partir de la table
OriginalL'auteur Doctor J
Essayer le NTILE fonction.
Vous diviserez vos données classées en 2 groupes et de choisir la valeur minimale du premier groupe. C'est parce que dans les jeux de données avec un nombre impair de valeurs, la première ntile aura 1 plus de valeur que la seconde. Ce rapprochement devrait fonctionner très bien pour les grands ensembles de données.
OriginalL'auteur dima
J'ai eu de la difficulté avec ça aussi, mais j'ai reçu de l'aide de Amazon. Depuis le 2014-06-30 version de Redshift, vous pouvez le faire avec le PERCENTILE_CONT ou PERCENTILE_DISC les fonctions de la fenêtre.
Ils sont un peu bizarre à utiliser, car ils auront point d'amure de la médiane (ou quel que soit percentile vous choisissez) sur chaque ligne. Mettez-vous cela dans une sous-requête, puis prendre le MIN (ou autre) de la médiane de la colonne.
# select count(num), min(median) as median
from
(select num, percentile_cont (0.5) within group (order by num) over () as median from temp);
count | median
-------+--------
5 | 4.0
(La raison, c'est compliqué, c'est que les fonctions de la fenêtre peut également faire leur propre mini-groupe-par et de commande pour vous donner la médiane de nombreux groupes de tous à la fois, et d'autres trucs.)
Dans le cas d'un nombre pair de valeurs, CONT(inuous) interpole entre les deux valeurs intermédiaires, dont le DISQUE(rete) permettra de choisir l'un d'eux.
OriginalL'auteur Doctor J
Je l'utilise généralement le NTILE fonction pour séparer les données en deux groupes si je suis à la recherche d'une réponse qui est assez proche. Cependant, si je veux exactement médian (par exemple, le point central d'un même ensemble de lignes), j'utilise une technique proposée sur le AWS Redshift Forum de Discussion.
Cette technique trie les lignes dans l'ordre croissant et l'ordre décroissant, si il y a un nombre impair de lignes, il renvoie la moyenne de la rangée du milieu (qui est, d'où row_num_asc = row_num_desc), qui est simplement la rangée du milieu lui-même.
Si il y a un même nombre de lignes, il retourne la moyenne des deux lignes centrales.
OriginalL'auteur Jeremy Salfen