Consultas de totales en Access. Sacar medias.

En la imagen que adjunto aparecen las cinco mejores marcas de varios atletas españoles en la prueba de 1500. Hasta ahora para sacar la media de cada atleta lo hacía "manualmente" en Excel pero, al objeto de automatizarlo, me gustaría saber si hay alguna forma de hacerlo a través de una consulta de Access partiendo de los campos que aparecen.

1 Respuesta

Respuesta
2

Puedes hacerlo una consulta de totales:

1º/ Creas una nueva consulta sobre esa tabla o consulta, y seleccionas los campos COD1, MARCA y APELLIDO.

2º/ En la cinta de opciones pulsas en el botón de Totales (el que tiene la letra griega sigma). Te abrirá una nueva opción el la parrilla de campos llamada Total.

3º/ Cambia el valor de esa fila "Total" del campo MARCA a "Promedio", dejando el de los otros campos en "Agrupar Por"

4º/ Guarda los cambios y ya lo tienes.

Un saludo.


http://nksvaccessolutions.com/academy/ 

Ahora que me fijo, lo anterior te funcionará si tu campo MARCA lo tienes como Fecha/Hora. Si es de texto, tendrás que convertirlo previamente a fecha/hora (o número) para poder realizar cálculos con él.

Muchas gracias Svein.

Efectivamente, tengo el campo MARCA en formato texto. Me acepta el formato de la conversión en una consulta previa de cualquiera de esas dos formas:

MARCA_format: Format([MARCA];"n:ss.ss")
MARCA_format: Format([MARCA];"n:ss\,ss")

pero al ejecutar la consulta de totales con el promedio (Avg) me sale el consabido "Data type mismatch in criteria expression" (Es un ordenador de empresa y el sistema operativo no está en español).

¿Puede deberse a un conflicto con la configuración regional?

Un saludo.

Hasta donde yo sé, la función format() no admite fracciones de segundo.

Es más, acabo de probar las dos expresiones que usas y no funcionan como se espera (algo lógico por otra parte, porque usas los segundos (ss) para los segundos y las centésimas:

Lo que tienes que hacer es convertir ese tiempo a número (si lo haces en centésimas mucho mejor), operas con ese número para calcular la media y le vuelves a dar formato de tiempo.

La idea es sencilla (por ejemplo 3:38.21)

los minutos los multiplicas por 60 y por 100 para expresarlos en centésimas => 3x60x100=18000

los segundos los multiplicas por 100 y los tienes en centésimas => 38x100=3800

Sumas las centésimas (21) con las dos cantidades anteriores (18000 y 3800) y ya tienes tu tiempo expresado en centésimas (18000+3800+21=21821), y al ser un número, puedes realizar operaciones con él.

Para realizar la operación inversa (por ejemplo: con 21873,5 que es la media para Antón):

Con el operador Mod obtienes las centésimas: 21873,5 Mod 100 = 74 (redondea el resultado)

Con el operador divisor entero y Mod obtienes los segundos: (21873,5 \ 100) Mod 60 = 38

Y con el divisor entero obtienes los minutos:  21873,5 \ 100 \ 60 = 3

Ahora solo nos falta construir la cadena de texto: 3 & ":" & 38 & "." & 74, que nos da los 3:38:74 de media para Antón, con el formato que ya tienes.

Un saludo.


http://nksvaccessolutions.com/academy/ 

Muchas gracias Svein. De esta forma funciona perfectamente. Así es como queda. Quería preguntarte algo relativo a las centésimas. Como ves, en algunas medias me sale redondeado a la décima(obviamente porque la centésima es 0). Hay alguna forma de configurarlo para que automáticamente me salga con dos decimales? Una forma manual he hacerlo sería concatenar un 0 a las cadenas con determinada distancia, pero siempre resultaría mejor tenerlo de forma automática.

Muchas gracias de nuevo por tu interés.

Carlos.

Cuando calcules cada parte (centésimas, minutos, segundos), antes de crear la cadena de texto, usa la función Format() para que el número tenga dos cifras:

Format(variableCentesimas;"00") 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas