es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Encontrar la mediana sin utilizar funciones de ventana.

Tengo un conjunto de datos con las columnas – cliente, producto y cantidad. Quiero encontrar la mediana de la cantidad con respecto a diferentes productos. Suponiendo que solo necesitamos trabajar con un número impar de filas.

Se permiten funciones como With, Join, funciones de agregación como count, avg, max, min, etc. Una solución usando subconsultas anidadas sería lo ideal para esta pregunta.

Hasta ahora he listado la cantidad y el producto en orden clasificado, y encontré el número de la mediana usando ROUND ((COUNT (QUANT) / 2) + 1) y ahora necesito encontrar esa fila de mediana sin usar ninguna función de ventana.

Entrada

 Producto  Cantidad
A 1
A 2
A 3
B 5
B 6
B 7
C 11
C 13
C 15
D 4
D 5
D 6

Salida

 Producto  Mediana
A 2
B 6
C 13
D 5
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para encontrar la mediana de la cantidad en relación con diferentes productos, podemos utilizar subconsultas anidadas:

    SELECT 
      producto, 
      AVG(cantidad) as Mediana 
    FROM 
      (SELECT 
         producto, 
         cantidad, 
         ROW_NUMBER() OVER (PARTITION BY producto ORDER BY cantidad) as rownum, 
         COUNT(*) OVER (PARTITION BY producto) as rowcount 
       FROM dataset) as subconsulta
    WHERE rownum IN ((rowcount + 1) / 2, ((rowcount + 1) / 2) + 1)
    GROUP BY producto;
    

    Explicación:

    • La subconsulta interna selecciona producto, cantidad y calcula el número de fila para cada fila para cada producto. También calcula el número total de filas para cada producto.
    • La consulta externa selecciona las filas que corresponden a la mediana de cantidad para cada producto. Calculamos la fila mediana tomando el promedio de la fila con número de fila (número total de filas + 1) / 2 y (número total de filas + 1) / 2 + 1 para cada producto.
    • Finalmente, agrupamos el resultado por producto.

    Esta consulta debería funcionar para conjuntos de datos con un número impar de filas. Si el conjunto de datos tiene un número par de filas, podemos modificar la consulta para calcular el promedio de los dos valores más cercanos al centro en lugar del valor medio.

Comments are closed.