Ver Mensaje Individual
  #4 (permalink)  
Antiguo 07/02/2013, 12:39
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: agrupar valores similares dentro de una fila

Hola zubintro:

Se me ocurren algunas ideas para hacer una consulta un poco más sencilla que la que propone jurena, pero no me queda del todo claro cómo es que necesitas tu información. Veamos este caso, podrías utilizar UNION para hacer una sola tabla donde conviertas las columnas a renglones, y una vez que hagas esto, entonces simplemente hacer un COUNT, es decir, algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+------+------+------+------+------+
  3. | id   | R1   | R2   | R3   | R4   | R5   |
  4. +------+------+------+------+------+------+
  5. |    1 |    1 |    1 |    2 |    5 |    5 |
  6. |    2 |    5 |    1 |    5 |    3 |    5 |
  7. |    3 |    5 |    5 |    1 |    3 |    2 |
  8. +------+------+------+------+------+------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT id, r valor, COUNT(*) cantidad FROM
  12.     -> (
  13.     -> SELECT id, r1 r FROM tabla
  14.     -> UNION ALL
  15.     -> SELECT id, r2 r FROM tabla
  16.     -> UNION ALL
  17.     -> SELECT id, r3 r FROM tabla
  18.     -> UNION ALL
  19.     -> SELECT id, r4 r FROM tabla
  20.     -> UNION ALL
  21.     -> SELECT id, r5 r FROM tabla) T
  22.     -> GROUP BY id, r;
  23. +------+-------+----------+
  24. | id   | valor | cantidad |
  25. +------+-------+----------+
  26. |    1 |     1 |        2 |
  27. |    1 |     2 |        1 |
  28. |    1 |     5 |        2 |
  29. |    2 |     1 |        1 |
  30. |    2 |     3 |        1 |
  31. |    2 |     5 |        3 |
  32. |    3 |     1 |        1 |
  33. |    3 |     2 |        1 |
  34. |    3 |     3 |        1 |
  35. |    3 |     5 |        2 |
  36. +------+-------+----------+
  37. 10 rows in set (0.00 sec)

De aquí se observa para cada id el valor que poseé y cuántas veces se repite este valor... ahora bien, si esta información la necesitas presentar en un solo registro, separado por comas, podrías utilizar la función GROUP_CONCAT, más o menos así:

Código MySQL:
Ver original
  1. mysql> SELECT CONCAT('El id = ', id, ' tiene ',
  2.     -> GROUP_CONCAT(cantidad, ' veces el # ', valor)) campo
  3.     -> FROM
  4.     -> (
  5.     ->   SELECT id, r valor, COUNT(*) cantidad FROM
  6.     ->   (
  7.     ->     SELECT id, r1 r FROM tabla
  8.     ->     UNION ALL
  9.     ->     SELECT id, r2 r FROM tabla
  10.     ->     UNION ALL
  11.     ->     SELECT id, r3 r FROM tabla
  12.     ->     UNION ALL
  13.     ->     SELECT id, r4 r FROM tabla
  14.     ->     UNION ALL
  15.     ->     SELECT id, r5 r FROM tabla
  16.     ->   ) T1
  17.     ->     GROUP BY id, r
  18.     -> ) T2
  19.     -> GROUP BY id;
  20. +-----------------------------------------------------------------------------+
  21. | campo                                                                       |
  22. +-----------------------------------------------------------------------------+
  23. | El id = 1 tiene 2 veces el # 1,1 veces el # 2,2 veces el # 5                |
  24. | El id = 2 tiene 1 veces el # 1,1 veces el # 3,3 veces el # 5                |
  25. | El id = 3 tiene 1 veces el # 1,1 veces el # 2,1 veces el # 3,2 veces el # 5 |
  26. +-----------------------------------------------------------------------------+
  27. 3 rows in set (0.00 sec)

Saludos
Leo.