¿Es posible GROUP BYmás de una columna en una SELECTconsulta MySQL ? Por ejemplo:
GROUP BY fV.tier_id AND 'f.form_template_id'
¿Es posible GROUP BYmás de una columna en una SELECTconsulta MySQL ? Por ejemplo:
GROUP BY fV.tier_id AND 'f.form_template_id'
Respuestas:
GROUP BY col1, col2, col3
Sí, puedes agrupar por múltiples columnas. Por ejemplo,
SELECT * FROM table
GROUP BY col1, col2
Los resultados primero se agruparán por col1, luego por col2. En MySQL, la preferencia de columna va de izquierda a derecha.
GROUP BYaplica col1+col2. Por ejemplo, col1 = 1, 2, 1, 2 | col2 = 1, 2, 3, 2ejecutar GROUP BY col1,col2volvería 1,1|1,3|2,2en lugar de 1,1|2,2lo sugerido. Mientras GROUP BY col2, col1que cambiaría el orden ascendente del retorno de col2. 1,1|2,2|1,3 Demostración: sqlfiddle.com/#!9/d5f69/1 Tenga en cuenta que el id de fila: 2 se devuelve en ambos casos a 2,2pesar de invertir las columnas.
GROUP BY). Y si en la primera columna definida hay resultados iguales, entonces solo dentro de los resultados iguales se ordena por la segunda columna definida
SUMusar con GROUP BY. Si GROUP BYsolo está en una columna, entonces SUMs todos los valores de cada distinto (diferente) el valor de la columna sqlfiddle.com/#!9/1cbde2/2 . Si GROUP BYdos columnas. Luego, mysql al principio verifica si para el valor de la primera columna hay valores diferentes en la segunda columna. En caso afirmativo, mysql SUMcada valor diferente de la segunda columna sqlfiddle.com/#!9/1cbde2/1 .
Sí, pero ¿qué significa agrupar por más dos columnas? Bueno, es lo mismo que agrupar por cada par único por fila. El orden en que enumera las columnas cambia la forma en que se ordenan las filas.
En tu ejemplo, escribirías
GROUP BY fV.tier_id, f.form_template_id
Mientras tanto, el código
GROUP BY f.form_template_id, fV.tier_id
daría resultados similares, pero ordenados de manera diferente.
Para usar un ejemplo simple, tenía un contador que necesitaba resumir direcciones IP únicas por página visitada en un sitio. Que es básicamente agrupar por nombre de página y luego por IP. Lo resolví con una combinación de DISTINCT y GROUP BY.
SELECT pagename, COUNT(DISTINCT ipaddress) AS visit_count FROM log_visitors GROUP BY pagename ORDER BY visit_count DESC;
Si prefiere (necesito aplicar esto) grupo por dos columnas al mismo tiempo, acabo de ver este punto:
SELECT CONCAT (col1, '_', col2) AS Group1 ... GROUP BY Group1
SELECT CONCAT(col1, '_', col2) FROM GROUP BY col1, col2. Los resultados generalmente tendrán el mismo aspecto que esta respuesta, pero la ejecución interna es bastante diferente.
GROUP BY CONCAT(col1, '_', col2)
GROUP BY col1, col2. Dará resultados incorrectos con algunos datos. Digamos col1, col2tener valores: ('a_b', 'c')en una fila y ('a', 'b_c')en otra. Esta respuesta incorrecta, con GROUP BY CONCAT agregará las dos filas en una. La respuesta correcta no lo hará.
SELECT CONCAT(col1, '_', col2) ... FROM ... GROUP BY col1, col2 ;