Duda en consulta

Iniciado por Kasswed, 15 Diciembre 2009, 01:47 AM

0 Miembros y 1 Visitante están viendo este tema.

Kasswed

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.
"He who allows himself to be insulted, deserves to be."

Repórtame cualquier falta a las normas del foro por mensaje privado.

дٳŦ٭



Con sangre andaluza :)


Kasswed

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().
"He who allows himself to be insulted, deserves to be."

Repórtame cualquier falta a las normas del foro por mensaje privado.

дٳŦ٭

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.


Con sangre andaluza :)


fede_cp

somos lo que hacemos para cambiar lo que somos

http://elhackerblog.blogspot.com el blog de elhacker.net!!

Kasswed

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?
"He who allows himself to be insulted, deserves to be."

Repórtame cualquier falta a las normas del foro por mensaje privado.

fede_cp

#6
Un ejemplo hipotetico sería


Código (php) [Seleccionar]

<?php
$con
="SELECT MAX(id_post) FROM usuarios";
$row=mysql_query($con$conexion);
$rrs=mysql_fetch_array($row);
$con2="SELECT user from usuario WHERE id_post='".$rss["0"]."'";
$row2=mysql_query($con2$conexion);
$rss=mysql_fetch_array(row2);
echo 
$rss[0];
?>


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
somos lo que hacemos para cambiar lo que somos

http://elhackerblog.blogspot.com el blog de elhacker.net!!

Kasswed

Hola.

No entiendo muy bien el código PHP.

¿Podrías ponerla en lenguaje SQL "puro"?

Gracias.
"He who allows himself to be insulted, deserves to be."

Repórtame cualquier falta a las normas del foro por mensaje privado.

fede_cp

#8
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

somos lo que hacemos para cambiar lo que somos

http://elhackerblog.blogspot.com el blog de elhacker.net!!

^Tifa^

Imagina este escenario basandome en lo que tu expones (Sobre tus 2 tablas usuarios y posts):

Código (sql) [Seleccionar]


mysql> select * from usuarios;
+----+--------+
| id | nombre |
+----+--------+
|  1 | pepe   |
|  2 | Mario  |
|  3 | Maria  |
|  4 | Juan   |
|  5 | Jose   |
+----+--------+
5 rows in set (0.00 sec)

mysql> select * from post;
+------+------+--------------------------+
| id   | pid  | mensaje                  |
+------+------+--------------------------+
|    1 |    1 | Me gusta la lluvia       |
|    1 |    1 | La vida es bella         |
|    1 |    1 | Que pais visitar         |
|    2 |    2 | Mi color favorito        |
|    1 |    1 | Tu fruta favorita        |
|    3 |    3 | Me gustan los viernes    |
|    3 |    3 | Dia de mi cumple         |
|    1 |    1 | Que computadora comprar? |
|    1 |    1 | Mi laptop rosa           |
|    4 |    4 | La manzana roja          |
|    4 |    4 | Aprendiendo lotus        |
|    4 |    4 | Viva Oracle              |
|    4 |    4 | Tu comida preferida      |
+------+------+--------------------------+
13 rows in set (0.00 sec)




Ahora quieres saber cuantos mensajes existen en la tabla post que hayan realizado cada usuario de la tabla usuarios.


Código (sql) [Seleccionar]


mysql> select usuarios.nombre, count(post.pid) from post inner join usu
arios where usuarios.id = post.id group by usuarios.id;
+--------+-----------------+
| nombre | count(post.pid) |
+--------+-----------------+
| pepe   |               6 |
| Mario  |               1 |
| Maria  |               2 |
| Juan   |               4 |
+--------+-----------------+
4 rows in set (0.00 sec)



Ahora si tu proposito unicamente es saber que usuario es el que ha realizado la mayoria de posts:

Código (sql) [Seleccionar]



mysql> select usuarios.nombre, count(post.pid) from post inner join usuarios whe
re usuarios.id = post.id group by usuarios.id limit 1;
+--------+-----------------+
| nombre | count(post.pid) |
+--------+-----------------+
| pepe   |               6 |
+--------+-----------------+
1 row in set (0.00 sec)