Título: Duda en consulta Publicado por: Kasswed en 15 Diciembre 2009, 01:47 am Hola.
Me ha surgido una duda realizando consultas. Necesito que, partiendo de una lista de sumas, la consulta me saque las máximas (habrá una máxima o más si las sumas son iguales) pero no sé hacerlo. Le he dado ya un montón de vueltas hoy y no caigo. También me gustaría hacer esto mismo con el máximo de AVG() o de COUNT()... ¿Alguna sugerencia? Gracias. Título: Re: Duda en consulta Publicado por: дٳŦ٭ en 15 Diciembre 2009, 02:15 am MAX()
Título: Re: Duda en consulta Publicado por: Kasswed en 15 Diciembre 2009, 02:20 am Gracias por tu respuesta, pero no me aclara nada.
Yo lo que quiero es usar MAX() en conjunto con las otras funciones, como SUM(), AVG() o COUNT(). Título: Re: Duda en consulta Publicado por: дٳŦ٭ en 15 Diciembre 2009, 02:48 am mm no pues no te entiendo, lo que podrías intentar es hacer un COUNT(MAX([campo])) o esperar a que alguien nos dé otra opinión.
Saludos. Título: Re: Duda en consulta Publicado por: fede_cp en 15 Diciembre 2009, 03:43 am cita un ejemplo
saludos Título: Re: Duda en consulta Publicado por: Kasswed en 15 Diciembre 2009, 03:51 am Imagina que tienes una tabla de usuarios y una tabla de posts.
En la tabla de usuarios información referente a usuarios como el id (primary key), nombre, la edad etc. En la tabla de posts tienes la ID del usuario que postea (como foreign key de usuarios), la id del post, dónde postea (URL) y lo que postea. Ahora quieres sacar el usuario que tiene el número máximo de posts en total. Habría que contar los posts y de ahí sacar el máximo. No se puede hacer con TOP o LIMIT porque puede haber varios usuarios con el mismo número de post y como máximos. ¿Cómo se haría? Título: Re: Duda en consulta Publicado por: fede_cp en 15 Diciembre 2009, 04:06 am Un ejemplo hipotetico sería
Código
algo asi se me ocurre todavía nose si eso es lo que tenes pensado hacer :S PD:no esta comprobado el codem porai hay algun error por ahi ;) saludos Título: Re: Duda en consulta Publicado por: Kasswed en 15 Diciembre 2009, 04:22 am Hola.
No entiendo muy bien el código PHP. ¿Podrías ponerla en lenguaje SQL "puro"? Gracias. Título: Re: Duda en consulta Publicado por: fede_cp en 15 Diciembre 2009, 04:26 am y seria
SELECT MAX(id_post) FROM usuarios-----primera variable ¡ toma el maximo id SELECT user from usuarios WHERE id_post=la variable anterior ¡ a partir del maximo id, selecciona al usuario con el maximo id_post (que seria el numero de posts). esas serian las consultas básicas saludos Título: Re: Duda en consulta Publicado por: ^Tifa^ en 15 Diciembre 2009, 13:43 pm Imagina este escenario basandome en lo que tu expones (Sobre tus 2 tablas usuarios y posts):
Código
Ahora quieres saber cuantos mensajes existen en la tabla post que hayan realizado cada usuario de la tabla usuarios. Código
Ahora si tu proposito unicamente es saber que usuario es el que ha realizado la mayoria de posts: Código
Título: Re: Duda en consulta Publicado por: sempus en 15 Diciembre 2009, 16:19 pm yo lo haria de esta forma, los campos se llaman distinto pero la idea se entiende Código si ordeno el resultado de forma descendente, se que el primer registro del cursor sera el mayor o igual, entonces lo capturo en una variable, luego hago una segunda consulta al resultado anterior y le filtro el campo veces, de este modo, no importara cuantas veces aparecezca, me lo tomara todas, nose si me di a entender xD en una sola consulta creo que no se puede, lo intente de varias formas :/ Título: Re: Duda en consulta Publicado por: fede_cp en 15 Diciembre 2009, 17:51 pm uhh, pense que era una sola tabla :xD, jajaja
yo lo haria con una sola tabla (menos dolor de cabeza :P). saludos y disculpen mi error PD:300 al fin! jajaja Título: Re: Duda en consulta Publicado por: ^Tifa^ en 15 Diciembre 2009, 17:56 pm Yo haria una vista y salgo del asunto de siempre tener que obtener el valor en una variable y luego llamarlo... sobretodo porque las variables son temporales, seguido te desconectas del motor el dato volatil se flushea.
Y estar constantemente haciendo 2 consultas (una para asignar valor a la variable otra para llamar ese valor) no lo aplicaria yo pero... para gustos. Si quieres puedes hacer una vista que se mantendra siempre actualizada a los datos de ambas tablas, ejemplo: Código
Código
PD: El ejemplo anterior es basado en mis tablas ejemplos puestas anteriormente. Título: Re: Duda en consulta Publicado por: sempus en 15 Diciembre 2009, 18:17 pm que curioso, a mi tambien se me ocurrio lo de la vista xD ,pero la deseche porque no estara siempre actualizada por lo menos, yo para actualizar uso REQUERY( ), entonces, dije, bah, en lugar de hacer 3 consulta 1) para actualizar la vista , 2) la que necesito y 3) la subconsulta, decide hacerlo de la forma que lo postee xD, aunque como tu dices para los gustos los colores, el caso es que esta resuelto :)
Título: Re: Duda en consulta Publicado por: ^Tifa^ en 15 Diciembre 2009, 18:26 pm Citar que curioso, a mi tambien se me ocurrio lo de la vista xD ,pero la deseche porque no estara siempre actualizada Recuerda corazon que la vista sencillamente es una tabla virtual no existe fisicamente, sus datos siempre reflejan lo que las tablas padres que lo componen posee. Por ende si se elimina, actualiza, inserta algun dato en un campo de la tabla padre, dicho campo tendra automaticamente la misma modificacion en la vista ;) Creo que con la vista creada ya es mas facil porke basaria 1 sola consulta siempre sobre la vista y asi obtendria lo que busca de manera siempre actualizada. Título: Re: Duda en consulta Publicado por: дٳŦ٭ en 15 Diciembre 2009, 19:10 pm :xD andaba medio perdido pero muchas gracias Tifa por tu explicación :)
Título: Re: Duda en consulta Publicado por: ^Tifa^ en 16 Diciembre 2009, 03:47 am No pasa nada дٳ para eso estamos todos aqui :D
Hay variadas maneras de el chico hacer lo que solicita, lo de la Vista es una, como tambien podria agregar 1 campo extra en la tabla usuarios que se llame por ejemplo 'veces' y que cada vez que X usuario haga un nuevo mensaje pues dicho campo 'veces' vaya creciendo de 1 en 1 ;) Asi podria ahorrarse el costoso analisis del JOIN y consultar en base a una sola tabla 'Usuarios'. Deben haber mas maneras de hacer lo que el pide, pero ya que estamos ofertando sugerencias. |