varios repetidos registros promedio funciones funcion ejemplos ejemplo contar consultas campos avg agrupar agrupamiento agrupados agrupadas sql mysql

sql - repetidos - Obtener el número de filas con una consulta GROUP BY



sql contar registros agrupados (5)

Hay una buena solución en MySQL.

Agregue la palabra clave SQL_CALC_FOUND_ROWS justo después de la palabra clave SELECT:

SELECT SQL_CALC_FOUND_ROWS t3.id, a,bunch,of,other,stuff FROM t1, t2, t3 WHERE (associate t1,t2, and t3 with each other) GROUP BY t3.id LIMIT 10,20

Después de eso, ejecute otra consulta con la función FOUND_ROWS ():

SELECT FOUND_ROWS();

Debería devolver el número de filas sin la cláusula LIMIT.

Consulte esta página para obtener más información: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows

Tengo una consulta al efecto de

SELECT t3.id, a,bunch,of,other,stuff FROM t1, t2, t3 WHERE (associate t1,t2, and t3 with each other) GROUP BY t3.id LIMIT 10,20

Quiero saber cuántas filas totales devolverá esta consulta sin el LÍMITE (para que pueda mostrar la información de paginación).

Normalmente, usaría esta consulta:

SELECT COUNT(t3.id) FROM t1, t2, t3 WHERE (associate t1,t2, and t3 with each other) GROUP BY t3.id

Sin embargo, GROUP BY cambia el significado de COUNT, y en su lugar obtengo un conjunto de filas que representan el número de valores únicos de t3.id en cada grupo.

¿Hay alguna manera de contar el número total de filas cuando uso un GROUP BY? Me gustaría evitar tener que ejecutar toda la consulta y solo contar el número de filas, ya que solo necesito un subconjunto de las filas porque los valores están paginados. Estoy usando MySQL 5, pero creo que es bastante genérico.



¿Son el "montón de otras cosas" todos agregados? Supongo que sí, ya que su GROUP BY solo tiene t3.id. Si ese es el caso, entonces esto debería funcionar:

SELECT COUNT(DISTINCT t3.id) FROM...

La otra opción por supuesto es:

SELECT COUNT(*) FROM ( <Your query here> ) AS SQ

No uso MySQL, así que no sé si estas consultas funcionarán allí o no.


Usando sub consultas:

SELECT COUNT(*) FROM ( SELECT t3.id, a,bunch,of,other,stuff FROM t1, t2, t3 WHERE (associate t1,t2, and t3 with each other) GROUP BY t3.id ) as temp;

por lo que la temperatura contiene el recuento de filas.


Todos los ans dados ejecutarán la consulta y luego encontrarán el recuento. Distinto es definitivamente más lento que agrupar por conjunto de datos grandes.

La mejor forma de encontrar el recuento de grupo es por debajo

SELECT sum(1) as counttotal FROM ( Your query with group by operator ) as T

Esto encontrará el recuento mientras se calcula el grupo por.