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.
Estás usando MySQL, por lo que puedes usar su función para hacer exactamente esto.
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;
SELECT FOUND_ROWS(); -- for most recent query
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows
¿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.