[SQL] Frecuencia de consulta mediana para un número dado

571. Consulta de frecuencia mediana para un número dado

Ideas

El número de dígitos se puede obtener por n = SUMA (frecuencia),

Crea dos columnas primero. asc_frequency: registra el número de números menor o igual que el número actual; desc_frequency: registra el número de números mayor o igual que el número actual

La razón de esto es que cuando encontramos el número correspondiente en asc_frequency> = n / 2, y en desc_frequency> = n / 2.

Si hay dos, el promedio de AVG (número) es la mediana

Pasos

  1. Crear una tabla temporal t

2. Seleccione el número correspondiente a> = n / 2 en asc_frequency y> = n / 2 en desc_frequency

WHERE t.asc_frequency >= (SELECT SUM(Frequency) FROM Numbers)/2
AND t.desc_frequency >= (SELECT SUM(Frequency) FROM Numbers)/2 
  1. Si hay varios números, devuelva el promedio de Número
SELECT AVG(Number) AS median
FROM () t
WHERE ...

Código

SELECT AVG(Number) AS median
FROM (SELECT n1.Number, n1.Frequency,
(SELECT SUM(Frequency) FROM numbers n2 WHERE n2.Number<=n1.Number) AS asc_frequency,
(SELECT SUM(Frequency) FROM numbers n3 WHERE n3.Number>=n1.Number) AS desc_frequency
FROM numbers n1) t
WHERE t.asc_frequency >= (SELECT SUM(Frequency) FROM Numbers)/2
AND t.desc_frequency >= (SELECT SUM(Frequency) FROM Numbers)/2 ;

Supongo que te gusta

Origin www.cnblogs.com/wyz-2020/p/12677076.html
Recomendado
Clasificación