Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/10/2013, 08:27
Avatar de DooBie
DooBie
 
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
SUM o GROUP BY?

Hola chumachos, tengo las siguientes tablas
tabla resultados
-id
-carrera
-puntos
-corredor
-posicion

tabla corredores
-id
-corredor

tabla carreras
-id
-carrera
-fecha

Bien, la tabla carreras y corredores son faciles, guarda los corredores y carreras con sus fechas, en la tabla resultados guardo relacion con las tablas corredores y carreras y ademas guardo los puntos de ese corredor en esa carrera en concreto.
Por ejemplo, tabla resultados (una muestra de lo que tengo en la bd):
Código MySQL:
Ver original
  1. +-----------+-----------+---------------+--------------+-----------------+
  2. | result_id | result_gp | result_points | result_rider | result_position |
  3. +-----------+-----------+---------------+--------------+-----------------+
  4. |         1 |         1 |            25 |           32 |               1 |
  5. |         2 |         1 |            20 |           20 |               2 |
  6. |         3 |         1 |            16 |           31 |               3 |
  7. |         4 |         1 |            13 |           14 |               4 |
  8. |         5 |         1 |            11 |           16 |               5 |
  9. |         6 |         1 |            10 |           11 |               6 |
  10. |         7 |         1 |             9 |            1 |               7 |
  11. |         8 |         1 |             8 |           26 |               8 |
  12. |         9 |         1 |             7 |           15 |               9 |
  13. |        10 |         1 |             6 |            7 |              10 |
  14. |        11 |         1 |             5 |           18 |              11 |
  15. |        12 |         1 |             4 |            8 |              12 |
  16. |        13 |         1 |             3 |            5 |              13 |
  17. |        14 |         1 |             2 |           25 |              14 |
  18. |        15 |         1 |             1 |            4 |              15 |
  19. |        16 |         1 |             0 |           28 |              16 |
  20. |        17 |         1 |             0 |           27 |              17 |
  21. |        18 |         1 |             0 |           23 |              18 |
  22. |        19 |         1 |             0 |            2 |              19 |
  23. |        20 |         1 |             0 |            6 |              20 |
  24. |        21 |         1 |             0 |            3 |              21 |
  25. |        22 |         1 |             0 |           17 |              22 |
  26. |        23 |         1 |             0 |           24 |              23 |
  27. |        24 |         1 |             0 |           10 |              24 |
  28. |        25 |         2 |            25 |           31 |               1 |
  29. |        26 |         2 |            20 |           14 |               2 |
  30. |        27 |         2 |            16 |           32 |               3 |
  31. |        28 |         2 |            13 |           16 |               4 |
  32. |        29 |         2 |            11 |            3 |               5 |
  33. |        30 |         2 |            10 |           20 |               6 |
  34. |        31 |         2 |             9 |            1 |               7 |
  35. |        32 |         2 |             8 |           11 |               8 |
  36. |        33 |         2 |             7 |           26 |               9 |
  37. |        34 |         2 |             6 |           15 |              10 |
  38. |        35 |         2 |             5 |           18 |              11 |
  39. |        36 |         2 |             4 |           17 |              12 |
  40. |        37 |         2 |             3 |            7 |              13 |
  41. |        38 |         2 |             2 |            8 |              14 |
  42. |        39 |         2 |             1 |           25 |              15 |
  43. |        40 |         2 |             0 |           27 |              16 |
  44. |        41 |         2 |             0 |            4 |              17 |
  45. |        42 |         2 |             0 |            5 |              18 |
  46. |        43 |         2 |             0 |           28 |              19 |
  47. |        44 |         2 |             0 |           24 |              20 |
  48. |        45 |         2 |             0 |           30 |              21 |
  49. |        46 |         2 |             0 |            6 |              22 |
  50. |        47 |         2 |             0 |           23 |              23 |
  51. |        48 |         2 |             0 |            2 |              24 |
  52. |        49 |         3 |            25 |           14 |               1 |
  53. |        50 |         3 |            20 |           31 |               2 |
  54. +-----------+-----------+---------------+--------------+-----------------+
Dados esos datos, quiero hacer una consulta que me devuelva todos los registros (los JOIN ya los se hacer) pero que me devuelva un campo puntos, en el que me sume los puntos por corredor, tengo esta consulta ya hecho (como vereis, la bd es mas extensa, pero no influye en lo que quiero hacer)
Código MySQL:
Ver original
  1. SELECT tbl_result.result_points, tbl_rider.rider_name, tbl_gp.gp_name, tbl_result.result_position, DATE_FORMAT(tbl_gp.gp_date, '%d/%m/%Y') gp_date, tbl_rider.rider_number, tbl_gp.gp_id, SUM(tbl_result.result_points) points
  2.         FROM tbl_result
  3.         INNER JOIN tbl_rider ON tbl_rider.rider_id = tbl_result.result_rider
  4.         INNER JOIN tbl_category ON tbl_category.category_id = tbl_rider.rider_category
  5.         INNER JOIN tbl_gp ON tbl_gp.gp_id = tbl_result.result_gp
  6.         WHERE YEAR(tbl_gp.gp_date) = 2013 AND tbl_category.category_id = 1
  7.         ORDER BY points DESC, tbl_gp.gp_date ASC, tbl_result.result_points DESC, tbl_result.result_position ASC
  8.         LIMIT 5
Si uso el SUM(tbl_result.result_points) me devuelve un unico resistro, el que corresponde al id = 1 con la suma de TODOS los puntos de todas las carreras y todos los corredores, lo que quiero es que me devuelva por separado por corredor y carrera, espero que se entienda....
Como podría hacerlo?