Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Agrupar y sumar registros dependiendo de dos condiciones

Estas en el tema de Agrupar y sumar registros dependiendo de dos condiciones en el foro de Mysql en Foros del Web. Hola de nuevo por aquí tengo una consulta que me retorna los siguientes registros. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT id_participante , apellido_participante , ...
  #1 (permalink)  
Antiguo 17/07/2017, 07:21
Avatar de flashmax  
Fecha de Ingreso: julio-2012
Ubicación: Bs.As. Argentina
Mensajes: 507
Antigüedad: 7 años, 3 meses
Puntos: 86
Agrupar y sumar registros dependiendo de dos condiciones

Hola de nuevo por aquí tengo una consulta que me retorna los siguientes registros.
Código MySQL:
Ver original
  1. SELECT id_participante, apellido_participante, nombre_participante,lugar_participante,
  2. SUM(puntaje) AS total, AVG(puntaje) AS promedio
  3. FROM votos, participantes  WHERE votos.id_participante = participantes.espejo
  4. AND id_prueba =3 GROUP BY  id_participante ORDER BY promedio DESC LIMIT 5

tabla votos:
Código SQL:
Ver original
  1. -- phpMyAdmin SQL Dump
  2. -- version 4.7.2
  3. -- https://www.phpmyadmin.net/
  4. --
  5. -- Servidor: 127.0.0.1
  6. -- Tiempo de generación: 17-07-2017 a las 13:24:22
  7. -- Versión del servidor: 10.1.21-MariaDB
  8. -- Versión de PHP: 5.6.30
  9.  
  10. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
  11. SET AUTOCOMMIT = 0;
  12. START TRANSACTION;
  13. SET time_zone = "+00:00";
  14.  
  15.  
  16. /*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
  17. /*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
  18. /*!40101 SET @[email protected]@COLLATION_CONNECTION */;
  19. /*!40101 SET NAMES utf8mb4 */;
  20.  
  21. --
  22. -- Base de datos: `campeonato2017`
  23. --
  24.  
  25. -- --------------------------------------------------------
  26.  
  27. --
  28. -- Estructura de tabla para la tabla `votos`
  29. --
  30.  
  31. CREATE TABLE `votos` (
  32.   `id_voto` INT(11) NOT NULL,
  33.   `id_participante` INT(11) NOT NULL,
  34.   `id_jurado` INT(11) NOT NULL,
  35.   `id_prueba` INT(11) NOT NULL,
  36.   `puntaje` INT(11) NOT NULL
  37. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
  38.  
  39. --
  40. -- Volcado de datos para la tabla `votos`
  41. --
  42.  
  43. INSERT INTO `votos` (`id_voto`, `id_participante`, `id_jurado`, `id_prueba`, `puntaje`) VALUES
  44. (53, 23, 14, 1, 21),
  45. (54, 47, 14, 1, 23),
  46. (55, 19, 14, 1, 20),
  47. (56, 36, 14, 1, 24),
  48. (57, 96, 14, 1, 23),
  49. (58, 109, 14, 1, 22),
  50. (59, 3, 14, 1, 22),
  51. (60, 55, 14, 1, 21),
  52. (61, 85, 14, 1, 23),
  53. (62, 40, 14, 1, 25),
  54. (63, 25, 14, 1, 21),
  55. (64, 24, 14, 1, 23),
  56. (65, 87, 14, 1, 22),
  57. (66, 31, 14, 1, 25),
  58. (67, 5, 14, 1, 20),
  59. (68, 14, 14, 1, 24),
  60. (69, 81, 14, 1, 23),
  61. (70, 23, 13, 1, 23),
  62. (71, 47, 13, 1, 21),
  63. (72, 36, 13, 1, 22),
  64. (73, 96, 13, 1, 23),
  65. (74, 109, 13, 1, 25),
  66. (75, 109, 13, 1, 21),
  67. (76, 3, 13, 1, 24),
  68. (77, 55, 13, 1, 23),
  69. (78, 85, 13, 1, 24),
  70. (79, 40, 13, 1, 26),
  71. (80, 25, 13, 1, 23),
  72. (81, 24, 13, 1, 25),
  73. (82, 87, 13, 1, 23),
  74. (83, 31, 13, 1, 20),
  75. (84, 5, 13, 1, 24),
  76. (85, 14, 13, 1, 23),
  77. (86, 81, 13, 1, 27),
  78. (88, 23, 10, 1, 23),
  79. (89, 47, 10, 1, 21),
  80. (90, 36, 10, 1, 22),
  81. (91, 96, 10, 1, 23),
  82. (92, 109, 10, 1, 25),
  83. (93, 109, 10, 1, 21),
  84. (94, 3, 10, 1, 24),
  85. (95, 55, 10, 1, 23),
  86. (96, 85, 10, 1, 24),
  87. (97, 40, 10, 1, 26),
  88. (98, 25, 10, 1, 23),
  89. (99, 24, 10, 1, 25),
  90. (100, 87, 10, 1, 23),
  91. (101, 31, 10, 1, 20),
  92. (102, 5, 10, 1, 24),
  93. (103, 14, 10, 1, 23),
  94. (104, 81, 10, 1, 27),
  95. (106, 23, 1, 1, 23),
  96. (107, 47, 1, 1, 24),
  97. (108, 19, 1, 1, 21),
  98. (109, 36, 1, 1, 25),
  99. (110, 96, 1, 1, 20),
  100. (111, 109, 1, 1, 23),
  101. (112, 3, 1, 1, 26),
  102. (113, 55, 1, 1, 21),
  103. (114, 85, 1, 1, 23),
  104. (115, 40, 1, 1, 27),
  105. (116, 25, 1, 1, 23),
  106. (117, 24, 1, 1, 24),
  107. (118, 87, 1, 1, 21),
  108. (119, 31, 1, 1, 22),
  109. (120, 5, 1, 1, 25),
  110. (121, 14, 1, 1, 24),
  111. (122, 81, 1, 1, 23),
  112. (123, 23, 15, 1, 22),
  113. (124, 47, 15, 1, 21),
  114. (125, 19, 15, 1, 24),
  115. (126, 36, 15, 1, 25),
  116. (127, 96, 15, 1, 23),
  117. (128, 109, 15, 1, 21),
  118. (129, 3, 15, 1, 23),
  119. (130, 55, 15, 1, 21),
  120. (131, 85, 15, 1, 20),
  121. (132, 40, 15, 1, 24),
  122. (133, 25, 15, 1, 22),
  123. (134, 24, 15, 1, 21),
  124. (135, 87, 15, 1, 23),
  125. (136, 31, 15, 1, 25),
  126. (137, 5, 15, 1, 24),
  127. (138, 14, 15, 1, 23),
  128. (139, 81, 15, 1, 21),
  129. (141, 23, 14, 3, 20),
  130. (142, 47, 14, 3, 20),
  131. (143, 19, 14, 3, 20),
  132. (144, 36, 14, 3, 20),
  133. (145, 96, 14, 3, 20),
  134. (146, 109, 14, 3, 20),
  135. (147, 3, 14, 3, 21),
  136. (148, 55, 14, 3, 21),
  137. (149, 85, 14, 3, 21),
  138. (150, 40, 14, 3, 21),
  139. (151, 25, 14, 3, 21),
  140. (152, 24, 14, 3, 21),
  141. (153, 87, 14, 3, 21),
  142. (154, 31, 14, 3, 21),
  143. (155, 5, 14, 3, 21),
  144. (156, 14, 14, 3, 21),
  145. (157, 81, 14, 3, 21),
  146. (158, 23, 13, 3, 21),
  147. (159, 47, 13, 3, 21),
  148. (160, 36, 13, 3, 21),
  149. (161, 96, 13, 3, 21),
  150. (162, 109, 13, 3, 22),
  151. (163, 109, 13, 3, 22),
  152. (164, 3, 13, 3, 22),
  153. (165, 55, 13, 3, 22),
  154. (166, 85, 13, 3, 22),
  155. (167, 40, 13, 3, 22),
  156. (168, 25, 13, 3, 22),
  157. (169, 24, 13, 3, 22),
  158. (170, 87, 13, 3, 23),
  159. (171, 31, 13, 3, 23),
  160. (172, 5, 13, 3, 23),
  161. (173, 14, 13, 3, 23),
  162. (174, 81, 13, 3, 23),
  163. (175, 23, 10, 3, 23),
  164. (176, 47, 10, 3, 23),
  165. (177, 36, 10, 3, 23),
  166. (178, 96, 10, 3, 23),
  167. (179, 109, 10, 3, 23),
  168. (180, 109, 10, 3, 23),
  169. (181, 3, 10, 3, 23),
  170. (182, 55, 10, 3, 23),
  171. (183, 85, 10, 3, 23),
  172. (184, 40, 10, 3, 23),
  173. (185, 25, 10, 3, 23),
  174. (186, 24, 10, 3, 23),
  175. (187, 87, 10, 3, 23),
  176. (188, 31, 10, 3, 23),
  177. (189, 5, 10, 3, 23),
  178. (190, 14, 10, 3, 23),
  179. (191, 81, 10, 3, 23),
  180. (192, 23, 1, 3, 23),
  181. (193, 47, 1, 3, 23),
  182. (194, 19, 1, 3, 23),
  183. (195, 36, 1, 3, 23),
  184. (196, 96, 1, 3, 24),
  185. (197, 109, 1, 3, 24),
  186. (198, 3, 1, 3, 24),
  187. (199, 55, 1, 3, 24),
  188. (200, 85, 1, 3, 24),
  189. (201, 40, 1, 3, 24),
  190. (202, 25, 1, 3, 24),
  191. (203, 24, 1, 3, 24),
  192. (204, 87, 1, 3, 24),
  193. (205, 31, 1, 3, 24),
  194. (206, 5, 1, 3, 24),
  195. (207, 14, 1, 3, 24),
  196. (208, 81, 1, 3, 24),
  197. (209, 23, 15, 3, 24),
  198. (210, 47, 15, 3, 25),
  199. (211, 19, 15, 3, 25),
  200. (212, 36, 15, 3, 25),
  201. (213, 96, 15, 3, 25),
  202. (214, 109, 15, 3, 25),
  203. (215, 3, 15, 3, 25),
  204. (216, 55, 15, 3, 25),
  205. (217, 85, 15, 3, 25),
  206. (218, 40, 15, 3, 25),
  207. (219, 25, 15, 3, 25),
  208. (220, 24, 15, 3, 26),
  209. (221, 87, 15, 3, 26),
  210. (222, 31, 15, 3, 26),
  211. (223, 5, 15, 3, 27),
  212. (224, 14, 15, 3, 27),
  213. (225, 81, 15, 3, 27);
  214.  
  215. --
  216. -- Índices para tablas volcadas
  217. --
  218.  
  219. --
  220. -- Indices de la tabla `votos`
  221. --
  222. ALTER TABLE `votos`
  223.   ADD PRIMARY KEY (`id_voto`);
  224.  
  225. --
  226. -- AUTO_INCREMENT de las tablas volcadas
  227. --
  228.  
  229. --
  230. -- AUTO_INCREMENT de la tabla `votos`
  231. --
  232. ALTER TABLE `votos`
  233.   MODIFY `id_voto` INT(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=226;COMMIT;
  234.  
  235. /*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
  236. /*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
  237. /*!40101 SET [email protected]_COLLATION_CONNECTION */;

aparte del id=3 quiero que agrupe y sume los id=1 de la columna id_prueba para tener el total de las pruebas 1 y 3 porque en el futuro abran mas registros con diferentes valores a 1 y 3 las pruebas 1 y 3 se combinan para tener un total.
si yo quito AND id=3 me suma todos los id de id_prueba no se como consultar dependiendo de dos condiciones .....espero que allá eplicado bien
__________________
Saludos!
----------------------------------------------------------
  #2 (permalink)  
Antiguo 17/07/2017, 08:55
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 3 meses
Puntos: 774
Respuesta: Agrupar y sumar registros dependiendo de dos condiciones

ya probaste con esto:
Código MySQL:
Ver original
  1. SELECT id_participante, apellido_participante, nombre_participante,lugar_participante,
  2. SUM(puntaje) AS total, AVG(puntaje) AS promedio , id_prueba
  3. FROM votos, participantes  WHERE votos.id_participante = participantes.espejo
  4. AND id_prueba in (1,3) GROUP BY  id_participante, id_prueba ORDER BY promedio DESC LIMIT 5

Otra cosa te recomiendo usar joins explicitos no implicitos como lo estas haciendo con esto tu query quedaria:

Código MySQL:
Ver original
  1. SELECT id_participante, apellido_participante, nombre_participante,lugar_participante,
  2. SUM(puntaje) AS total, AVG(puntaje) AS promedio , id_prueba
  3. FROM votos as t1
  4. inner join participantes as t2 on (t1.id_participante=t2.espejo)  WHERE
  5. id_prueba in (1,3) GROUP BY  id_participante, id_prueba ORDER BY promedio DESC LIMIT 5
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 17/07/2017, 13:33
Avatar de flashmax  
Fecha de Ingreso: julio-2012
Ubicación: Bs.As. Argentina
Mensajes: 507
Antigüedad: 7 años, 3 meses
Puntos: 86
Respuesta: Agrupar y sumar registros dependiendo de dos condiciones

hola, gracias por ayudar tal ves me exprese mal, quiero la suma de los id 1 y 3 , probé su código me devuelve solo el id_prueba 1 si invierto 1 por 3 devuelve 3 pero no suma los dos id.
ejemplo:
si consulto id=1 me devuelve 110
si consulto id=3 me devuelve 120
quería agrupar los dos y sumar para que me de 230
__________________
Saludos!
----------------------------------------------------------
  #4 (permalink)  
Antiguo 17/07/2017, 13:36
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 3 meses
Puntos: 774
Respuesta: Agrupar y sumar registros dependiendo de dos condiciones

Prueba con algo asi:
Código MySQL:
Ver original
  1. SELECT id_participante, apellido_participante, nombre_participante,lugar_participante,
  2. SUM(puntaje) AS total, AVG(puntaje) AS promedio , id_prueba
  3. FROM votos as t1
  4. inner join participantes as t2 on (t1.id_participante=t2.espejo)  WHERE
  5. id_prueba in (1,3) GROUP BY  id_participante ORDER BY promedio DESC LIMIT 5
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 17/07/2017, 13:52
Avatar de flashmax  
Fecha de Ingreso: julio-2012
Ubicación: Bs.As. Argentina
Mensajes: 507
Antigüedad: 7 años, 3 meses
Puntos: 86
Respuesta: Agrupar y sumar registros dependiendo de dos condiciones

Excelente ahora si suma 1 y 3 te agradezco mucho tu ayuda y la corrección de los joins
__________________
Saludos!
----------------------------------------------------------

Etiquetas: agrupar, condiciones, dependiendo, order, registros, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:28.