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.

¿Es posible utilizar SQL para mostrar el promedio de algunos valores en una columna y luego en columnas subsiguientes mostrar los valores individuales?

Tengo un montón de datos y quiero que la salida muestre un promedio de todos los puntos de datos, pero también los puntos de datos individuales en columnas subsecuentes. Idealmente se vería algo así:

      Compuesto | Sujeto | Promedio de datapoint | Datapoint Experimento 1 | Datapoint Exp 2 | ...

……….XYZ……|…..ABC….|…………40……………|……………20…………………………|……………60……………|……
……….TUV……|…..ABC….|…………30……………|……………20…………………………|……………40……………|……
……….TUV……|…..DEF….|…………20……………|……………10…………………………|……………30……………|……

Un problema con el que me estoy encontrando es que obtengo líneas repetitivas de información. Otro es que tengo algunas filas que extraen información que no se aplica, de modo que algunos de los puntos de datos individuales en, por ejemplo, la fila 2 tendrían información del sujeto DEF cuando solo quiero que tenga información del sujeto ABC.

¡Espero que esto tenga sentido! Actualmente estoy usando unión interna con muchos calificadores where. Estoy cerca pero no del todo allí. Agradezco cualquier ayuda y avíseme si puedo proporcionar información adicional para ayudarlo a ayudarme.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr la salida deseada, se puede utilizar GROUP BY para agrupar los datos por compuesto y sujeto, y luego calcular el punto de datos promedio utilizando la función AVG. Para mostrar los puntos de datos individuales en columnas posteriores, se puede usar una instrucción CASE con funciones de agregación como MAX o MIN para seleccionar el punto de datos solo para el experimento correspondiente. Aquí hay una consulta de ejemplo que debería dar la salida deseada:

    SELECT
        compound,
        subject,
        AVG(datapoint) AS avg_datapoint,
        MAX(CASE experiment WHEN 1 THEN datapoint END) AS datapoint_experiment_1,
        MAX(CASE experiment WHEN 2 THEN datapoint END) AS datapoint_experiment_2,
        -- añade más instrucciones CASE para experimentos adicionales
        -- puedes usar MIN en lugar de MAX si quieres mostrar el punto de datos mínimo
        -- o puedes usar array_agg para mostrar todos los puntos de datos como un array
        ...
    FROM
        my_table
    WHERE
        subject = 'ABC' -- filtra para mostrar solo los datos de los sujetos ABC
    GROUP BY
        compound,
        subject
    ORDER BY
        compound,
        subject
    

    Esta consulta agrupa los datos por compuesto y sujeto, calcula el punto de datos promedio utilizando la función AVG y luego usa instrucciones CASE para seleccionar los puntos de datos para cada experimento. Puedes agregar más instrucciones CASE si tienes más experimentos para mostrar. Finalmente, la consulta filtra los datos para mostrar solo información para el sujeto ABC, pero puedes eliminar esta cláusula WHERE si deseas ver datos para todos los sujetos.

    ¡Espero que esto ayude! Hazme saber si tienes alguna pregunta adicional o si necesitas aclaraciones sobre cualquier cosa.

Comments are closed.