2010-12-11 26 views
10

:¿Cómo obtengo la longitud de cadena promedio en mysql? Este

SELECT AVG(LENGTH(string)) 
    FROM BLAH 
LIMIT 10; 

... parece que moler a través de todos los resultados. Si me quito el AVG, es mucho más rápido. Es mejor crear una subconsulta como

SELECT AVG(len) 
    FROM (SELECT LENGTH(string) as len 
      FROM BLAH 
     LIMIT 10) as herp 

Esto también parece lento. No quiero cargarlo todo en php loop con strlen. Esperaba que hubiera una solución eficiente de memoria. bucles

+0

¿Qué tan lenta es la subconsulta? –

+0

¿Puede mostrarnos cómo limita realmente a las últimas publicaciones X de un autor, y puede decirnos por qué odia las subconsultas? – pilcrow

+0

Quiero tomar un promedio de las primeras 2 entradas en la lista [1,2,3,4]. Una subconsulta toma el subconjunto [1,2] y luego usa el avg() en él. Es mejor agregar a un acumulador luego dividir, que tener una longitud de carga arbitraria establecida en la memoria. Como otros han señalado, es solo un pedido de id desc, pero realmente esa parte no es tan significativa. – ForeverConfused

Respuesta

6

la primera consulta a través de todas las filas de la tabla (el límite del 10 doest limitar nada, ya que no siempre será solamente 1 fila devuelta)

filas el segundo de AVG consulta del 1 al 10

lo tipo de promedio que estás buscando?

+0

Obteniendo la longitud promedio de publicación en un foro de escritores para las últimas X entradas que han realizado. Odio usar subconsultas así que esperaba que hubiera una mejor manera. – ForeverConfused

+0

@ForeverConfused no hay, puede usar un pedido de DESC en la subconsulta para los últimos 10 –

+0

Es un promedio, así que técnicamente podría simplemente agregarse a un contador y luego dividirse por el número de entradas que golpeó. La forma subconsciente que muestro pasa por los elementos dos veces. – ForeverConfused

Cuestiones relacionadas