Si tengo una tabla MySQL que se parece a esto:
recuento de páginas de acción nombre_empresa ------------------------------- Empresa A PRINT 3 Empresa A PRINT 2 Empresa A PRINT 3 Empresa B CORREO ELECTRÓNICO Empresa B IMPRIMIR 2 Empresa B IMPRIMIR 2 Empresa B IMPRESIÓN 1 Empresa A PRINT 3
¿Es posible ejecutar una consulta MySQL para obtener resultados como este:
nombre_empresa EMAIL IMPRIMIR 1 páginas IMPRIMIR 2 páginas IMPRIMIR 3 páginas -------------------------------------------------- ----------- Empresa A 0 0 1 3 EmpresaB 1 1 2 0
La idea es que pagecount
puede variar de modo que la cantidad de columna de salida debería reflejar que, una columna para cada action
/ pagecount
par y luego el número de visitas por company_name
. No estoy seguro de si esto se llama una tabla dinámica, pero alguien sugirió eso.
Respuestas:
Esto es básicamente una tabla dinámica.
Un buen tutorial sobre cómo lograr esto se puede encontrar aquí: http://www.artfulsoftware.com/infotree/qrytip.php?id=78
Aconsejo leer esta publicación y adaptar esta solución a sus necesidades.
Actualizar
Después de que el enlace anterior ya no esté disponible, me siento obligado a proporcionar información adicional para todos ustedes que buscan respuestas de mysql pivot aquí. Realmente tenía una gran cantidad de información, y no pondré todo desde allí (incluso más, ya que no quiero copiar su vasto conocimiento), pero daré algunos consejos sobre cómo lidiar con pivot Tablas de la manera sql generalmente con el ejemplo de peku que hizo la pregunta en primer lugar.
Tal vez el enlace vuelva pronto, estaré atento.
La forma de la hoja de cálculo ...
Muchas personas simplemente usan una herramienta como MSExcel, OpenOffice u otras herramientas de hoja de cálculo para este propósito. Esta es una solución válida, solo copie los datos allí y use las herramientas que ofrece la GUI para resolver esto.
Pero ... esta no era la pregunta, e incluso podría dar lugar a algunas desventajas, como cómo ingresar los datos en la hoja de cálculo, la escala problemática, etc.
La forma SQL ...
Dada su mesa se ve algo así:
Ahora mire en su mesa deseada:
Las filas (
EMAIL
,PRINT x pages
) se parecen a las condiciones. La agrupación principal es porcompany_name
.Para configurar las condiciones, esto grita más bien por usar la
CASE
declaración. Con el fin de agrupar por algo, así, el uso ...GROUP BY
.El SQL básico que proporciona este pivote puede verse así:
Esto debería proporcionar el resultado deseado muy rápido. El principal inconveniente de este enfoque, cuantas más filas desee en su tabla dinámica, más condiciones deberá definir en su declaración SQL.
Esto también puede tratarse, por lo tanto, las personas tienden a usar declaraciones preparadas, rutinas, contadores y demás.
Algunos enlaces adicionales sobre este tema:
fuente
Mi solución está en T-SQL sin ningún pivote:
fuente
SUM()
solo puede funcionar con datos numéricos si necesita girar cadenas que tendrá que usarMAX()
SUM(CASE WHEN (action='PRINT' AND pagecount=1) THEN 1 ELSE 0 END)
, puedes hacerloSUM(action='PRINT' AND pagecount=1)
ya que la condición se convertirá1
en verdadera y0
falsaPara MySQL, puede poner directamente condiciones en
SUM()
función y se evaluará como booleano0
o,1
por lo tanto, puede tener su recuento en función de sus criterios sin usarIF/CASE
declaracionesDEMO
fuente
crosstab()
.Para pivote dinámico, use
GROUP_CONCAT
conCONCAT
. La función GROUP_CONCAT concatena cadenas de un grupo en una cadena con varias opciones.DEMO AQUÍ
fuente
Un stardard-SQL versión usa lógica booleana :
SQL Fiddle.
¿Cómo?
TRUE OR NULL
rendimientosTRUE
.FALSE OR NULL
rendimientosNULL
.NULL OR NULL
rendimientosNULL
.Y
COUNT
solo cuenta valores no nulos. Voiláfuente
La respuesta correcta es:
fuente
other_value
mesa?SET
consulta para aumentar el valor de defualt que está limitado a 1024 para GROUP_CONCAT después de 1024 GROUP_CONCAT simplemente trunca la cadena sin un error, lo que significa que pueden ocurrir resultados inesperados ...Existe una herramienta llamada generador de tabla dinámica de MySQL, que puede ayudarlo a crear una tabla dinámica basada en web que luego puede exportar a Excel (si lo desea). puede funcionar si sus datos están en una sola tabla o en varias tablas.
Todo lo que necesita hacer es especificar la fuente de datos de las columnas (admite columnas dinámicas), filas, los valores en el cuerpo de la tabla y la relación de la tabla (si hay alguna)
La página de inicio de esta herramienta es http://mysqlpivottable.net
fuente
fuente