Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/08/2012, 14:51
Erick_SS
 
Fecha de Ingreso: diciembre-2009
Ubicación: San Salvador, El Salvador
Mensajes: 20
Antigüedad: 14 años, 11 meses
Puntos: 0
Pregunta Utilizando Distinct junto con Group By

Buenas Tardes gente,
esta ocasión vengo por que me he encontrado con un desafío.
Estoy viendo el sistema bibliotecario de una institución educativa y me han dejado de realizar unas estadísticas sobre el uso de los recursos bibliotecarios.

Detallo el problema que tengo acontinuación.

Tengo la tabla PRESTAMOS donde se almacenan los registros de los libros que han sido prestados junto con los datos respectivos, id del usuario que lo prestó, la fecha en q se prestó, la hora, y la fecha en que debe de entregarlo...

Ahora bien hay una tabla que contiene los libros, la tabla se llama obras, entonces cada obra tiene su clasificación de 0, 1, 2, 3, 4, 5 hasta 9 o más.

Con estos datos debo de obtener la cantidad de usuarios que realizaron préstamos en un rango de fechas (fecha_inicio y fecha_fin), teniendo en cuenta que cada usuario puede realizar 3 consultas diarias.

Ahora bien, tengo que mostrar una tabla ordenada y agrupada según la clasificación de los libros, seguido de la cantidad de Usuarios únicos, sin repetir, que prestaron libros y luego la cantidad de libros que fueron prestados, quedando asi el resultado que deseo obtener.

No | Categoría | Cantidad de Usrs | Cantidad de Préstamos
________________________________________________
1 | 0 | 512 | 1020
2 | 1 | 50 | 212
3 | 2 | 10 | 50
4 | 3 | 23 | 72

etc etc etc

Hoy viene el problema, recordemos que los usuarios pueden realizar prestamos de cualquier categoria, categoría 1, Categoria 2.. de todas las que existan
Al hacer la consulta, me debe de dar Cierta cantidad, pero el problema es que me duplica los ids de los usuasio, por que si un usuario prestó un libro de la categoría 0 me lo agrega a la cantidad de usuarios, pero cuando ese mismo usuarios presta otro libro de la categoría 2, me lo suma de nuevo y asi pasa cuando ese mismo usuario presta un libro de la categoria 3, asi como les explico me acaba de sumar 2 veces mas el Id de ese usuario, entonces deseo saber si hay una manera de poder obtener el id del usuario, solo una vez sin que se sume en las demás categorías, para poder obtener el número exacto

he empezado a armar el query y lo que tengo hasta este momento es lo siguiente:

Código:
SELECT count(obras.clasifica) cantidad, substring(obras.clasifica,1,1) categoria, count(distinct usrs.idusr) cantidad_usrs
FROM prestamos
INNER JOIN catalogo ON prestamos.idcat = catalogo.idcat
INNER JOIN obras ON catalogo.idobra = obras.idobra
INNER JOIN usrs ON usrs.idusr = prestamos.idusr
INNER JOIN cooperante on cooperante.id = usrs.idcooperante
WHERE substring(prestamos.dateadd,1,10) >='2012-06-01' AND substring(prestamos.dateadd,1,10) <='2012-07-31' and cooperante.id='1'
and usrs.eliminado = 0
GROUP BY substring(obras.clasifica,1,1);
Espero su ayuda por favor, en si lo que deseo hacer
es obtener los usuarios agrupados por categoría pero que si un mismo usuario tiene un registro a otra categoria no lo tome en cuenta el mysql,

es algo complicado toda esta explicación, pero espero haya sido de ayuda para comentarles mi caso y espero su ayuda,

gracias de antemano