Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-10-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Seleccionar el MAX de un COUNT

Hola amigos,

Soy un poco novatillo en esto del SQL y para aprender estoy haciendo un ejemplo con una base de datos de una librería. Tengo tres tablas:
libros: registro,titulo,escritor,pais...
compras: registro,id_libro,id_comprador
compradores: registro,nombre,domicilio...

La cosa es que estoy intentando sacar el mayor número de libros vendidos de un país. Para ello hago lo siguiente:
Código SQL [-]
SELECT pais,count(pais) as cuenta FROM 
(libros LEFT JOIN compras ON libros.registro=compras.id_libro) 
WHERE compras.registro IS  NOT null 
group by pais order by cuenta desc;
Con esto consigo obtener un listado de países y de los número de libros vendidos por país ordenados de forma descendente. Pero no consigo lo q quiero que es obtener el país más vendedor. He intentado aplicar algo como MAX(COUNT(pais)) pero no funciona.
¿Alguien que me saque de dudas?
Muchas gracias!!!
Responder Con Cita
  #2  
Antiguo 07-10-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola vejerf, sobre tu consulta podrías aplicar First o Top dependiendo de la BD que uses, para obtener el primer registro, así como esta tu consulta el primero sería el que tiene el Count mas alto.

Código SQL [-]
SELECT first 1 pais,count(pais) as cuenta FROM 
(libros LEFT JOIN compras ON libros.registro=compras.id_libro) 
WHERE compras.registro IS  NOT null 
group by pais order by cuenta desc

O también

Código SQL [-]
Select Max(cuenta)
From (SELECT pais,count(pais) as cuenta FROM 
(libros LEFT JOIN compras ON libros.registro=compras.id_libro) 
WHERE compras.registro IS  NOT null 
group by pais order by cuenta desc)

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.

Última edición por Caro fecha: 07-10-2008 a las 13:07:52.
Responder Con Cita
  #3  
Antiguo 07-10-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
No me funciona :(

Gracias por tu pronta respuesta Caro, pero la cosa es que no funciona con ninguna de las dos soluciones. Parece que no me reconoce ninguna de las dos palabras claves que me das ni first ni top.

Uso una base de datos MySQL.

Gracias de todas formas
Responder Con Cita
  #4  
Antiguo 07-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
creo que con
Código SQL [-]
SELECT pais,count(pais) as cuenta, max(cuenta) as Maximo FROM 
(libros LEFT JOIN compras ON libros.registro=compras.id_libro) 
WHERE compras.registro IS  NOT null 
group by pais order by cuenta desc;

tendras el maximo cuenta (numero de libros vendidos, en teoria) por pais, no?

Cita:
el mayor número de libros vendidos de un país
no hay un mayor numero de libros vendidos por pais ...solo un numero de ventas, total y unico, por pais. cuenta te dara ese numero. Creo que el error lo tienes en lo que estas buscando, creo que seria el mayor numero de ventas por libro y por pais. Corrigeme si me equivoco, y entonces la sentencia cambia bastante.
Responder Con Cita
  #5  
Antiguo 07-10-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola de nuevo, en mysql tienes que utilizar Limit.

Código SQL [-]
SELECT pais,count(pais) as cuenta FROM 
(libros LEFT JOIN compras ON libros.registro=compras.id_libro) 
WHERE compras.registro IS  NOT null 
group by pais order by cuenta desc
Limit 1;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #6  
Antiguo 07-10-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Caro ahora sí que funciona... Muchas gracias ...
Coso, quizás no expliqué correctamente lo que buscaba.
Lo intento de nuevo.
Tengo una tabla de libros con campos como titulo, autor o pais, es decir, asociamos el libro a un pais según su autor.
Por otra parte tengo la tabla compras que me relaciona un comprador con un libro comprado. Entonces en esta tabla cada registro podemos decir que equivale a la venta de un libro y ese libro lo teníamos asociado a un país.
Lo que buscamos es el "país que más ventas ha tenido". Lo pongo entre comillas porque en realidad lo que se venden son los libros asociados a un país.
Sé que es enrevesado pero es lo q me pedían ...
Espero haberme explicado un poco
Gracias a los dos!!!
Responder Con Cita
  #7  
Antiguo 07-10-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola coso, creo que esta parte daría error

Cita:
Empezado por coso Ver Mensaje
SELECT pais,count(pais) as cuenta, max(cuenta) as Maximo FROM
talvez podría ser.

Código SQL [-]
Select Max(cuenta)
From (SELECT pais,count(pais) as cuenta FROM 
(libros LEFT JOIN compras ON libros.registro=compras.id_libro) 
WHERE compras.registro IS  NOT null 
group by pais order by cuenta desc)

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #8  
Antiguo 07-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
es posible caro, lo escribi de memoria y sql no es mi fuerte . Gracias por la correccion.
Responder Con Cita
  #9  
Antiguo 07-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Vamos, lo que buscabas era el numero de ventas del pais con mas ventas, no? Si, creo q si, entendido pues un saludo
Responder Con Cita
  #10  
Antiguo 07-10-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Pues si eso era lo que buscaba ... ´
Por otra parte, la sentencia que propones me da error. Ya la había probado antes, pero me da un error y me dice que cada tabla debe tener su propio alias o algo así Caro
Responder Con Cita
  #11  
Antiguo 07-10-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por vejerf Ver Mensaje
Por otra parte, la sentencia que propones me da error. Ya la había probado antes, pero me da un error y me dice que cada tabla debe tener su propio alias o algo así Caro
Si te refieres a lo ultimo que puse entonces aumentale su Alias y ya no sería necesario hacer el Order by.

Código SQL [-]
Select Max(cuenta)
From (SELECT pais,count(pais) as cuenta FROM 
(libros LEFT JOIN compras ON libros.registro=compras.id_libro) 
WHERE compras.registro IS  NOT null 
group by pais) Tabla

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #12  
Antiguo 07-10-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Perdón por abusar de la confianza... pero ahora con esta última sentencia pues sí obtengo el max(cuenta) que es lo que buscaba... pero no puedo obtener el país. Pensé que sería tan sencillo como:
Código SQL [-]
Select pais,Max(cuenta)From (SELECT pais,count(pais) as cuenta FROM (libros LEFT JOIN compras ON libros.registro=compras.id_libro) WHERE compras.registro IS  NOT null group by pais) Tabla
La cosa es que así no funciona... ¿por qué?
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como seleccionar campos de una tabla sin saber cuantos van a seleccionar david duarte SQL 7 05-04-2010 21:15:43
Sintaxis con count zvf SQL 17 31-01-2008 01:02:18
RecordCount Vs Count (SQL) vtdeleon Conexión con bases de datos 8 10-10-2005 08:10:28
varios count pepe2000 SQL 7 16-02-2005 18:16:51
Resultado de Count en SQL MRang14 SQL 2 05-03-2004 19:42:47


La franja horaria es GMT +2. Ahora son las 08:17:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi