Hola a todos
bueno llevo todo el dia con esto y no me sale haber si alguien me puede ayudar un poco. Tengo 3 tablas en una base de datos una llamada libros donde aparece el nombre del libro y el importe en euros, luego tengo otra donde estan los clientes o compradores donde aparece el nombre del cliente, su direccion... y por ultimo otra que se llama compras donde aparece el id del libro comprado y el id del cliente. (esos ids son consecutivos y use auto_incremente...)
Bueno necesito en UNA sola consulta obtener el nombre de los clientes que han comprado al menos un libro y el numero total de libros comprados ordenados decrecientemente por el numero total de libros comprados.
muchas gracias!!
saludos!!
Si llevas todo el día con eso algo tendrás hecho. Postealo.
tengo muchas consultas hechas la que mas se acerca es esta
SELECT `compradores`.`nombre` FROM `compradores`, `compras` WHERE `compras`.`id_comprador` = `compradores`.`registro`
registro y id_comprador = INT(9) UNSIGNED AUTO_INCREMENT ( el id de cada cliente y compra )
solo me salta que me muestre el numero de libros que cada cliente compro.. ( porque lo de ordenarlos y eso se como es )
saludos!
Si el id_comprador de la tabla compradores es registro solo te falta agrupar, contar y ordenador.
¿Tienes claro el uso del agrupamiento? Lo tienes casi hecho
hola
pues lo de agrupar si puedes expicamelo porque no me sale al agruparlos me sale un unico registro con todo unido es decir me sale en lugar de los 8 clientes que puse de prueba me sale uno solo con el total al lado asi
comprador | total de libros
lo que quiero es que salga asi
comprador 1 | libros comprados
comprador 2 | libros comprados ..
...
que me salga los libros de cada comprador las tablas son estas
CREATE TABLE IF NOT EXISTS `libros` (
`registro` INT(9) UNSIGNED AUTO_INCREMENT,
`titulo` VARCHAR(35),
`escritor` VARCHAR(35),
`editorial` VARCHAR(20),
`soporte` SET('LIBRO', 'CD', 'DVD'),
`fecha` DATETIME,
`pais` VARCHAR(20),
`importe_euros` FLOAT(8,3),
`anotaciones` BLOB,
PRIMARY KEY (`registro`, `titulo`, `pais`),
UNIQUE (`registro`)
);
CREATE TABLE IF NOT EXISTS `compradores` (
`registro` INT(9) UNSIGNED AUTO_INCREMENT,
`nombre` VARCHAR(35),
`fecha_nacimiento` DATETIME,
`telefono` VARCHAR(10),
`domicilio` VARCHAR(35),
`poblacion` VARCHAR(25),
`anotaciones` TEXT,
PRIMARY KEY (`registro`, `nombre`),
UNIQUE (`registro`)
);
CREATE TABLE IF NOT EXISTS `compras` (
`registro` INT(9) UNSIGNED AUTO_INCREMENT,
`id_comprador` INT(9) UNSIGNED,
`id_libro` INT(9) UNSIGNED,
PRIMARY KEY (`registro`),
UNIQUE (`registro`)
);
muchas gracias!!
Hola
bueno ya me las arregle yo
hice esto
/*Obtenemos el nombre de los compradores que han comprado al menos un libro, el numero de libros comprados ordenados decrecientemente por el numero
total de libros comprados*/
SELECT `compradores`.`nombre`, COUNT(*) FROM `compradores`, `compras` WHERE `compras`.`id_comprador` = `compradores`.`registro` GROUP BY `compradores`.`nombre` ORDER BY COUNT(*) DESC;
y me da como resultado:
ramon 2
will 2
pablo 1
sergio 1
leito 1
antonio 1
justo lo que queria
gracias de todas formas!