Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Ayuda con una query...

Estas en el tema de Ayuda con una query... en el foro de Mysql en Foros del Web. Hola amigos, Llevo rato rompiéndome la cabeza con una query y no acabo de dar con la respuesta. Tengo las siguientes tablas: [users] iduser, bigint(10), ...
  #1 (permalink)  
Antiguo 22/08/2009, 00:15
 
Fecha de Ingreso: agosto-2009
Mensajes: 2
Antigüedad: 10 años, 3 meses
Puntos: 0
Ayuda con una query...

Hola amigos,
Llevo rato rompiéndome la cabeza con una query y no acabo de dar con la respuesta.
Tengo las siguientes tablas:

[users]
iduser, bigint(10), autoincrement
name, varchar(50)
email, varchar(100)

[users_tests]
iduserstests, bigint(10), autoincrement
userid, bigint(10)
testid, bigint(10)
teststatusid, bigint(10)

[tests]
idtest, bigint(10), autoincrement
testname, varchar(30) <- "English Test", "Sales Test" o "Finance Test"
created, datetime

[teststatus]
idteststatus, bigint(10), autoincrement
statusname, varchar(20) <- "pending","complete" o "incomplete"

Y necesito una query para obtener el siguiente resultado: [testname, total de pending, total de complete, total de incomplete]... ejemplo:
[["English Test",5,8,3],
["Sales Test",9,12,4],
["Finance Test",6,2,2]]

Es posible obtener esto con una sola query???
He estado haciendo pruebas usando GROUP BY, pero logro agrupar uno solo de los campos.
¿Me ayudan, please?
Saludos y gracias!!!
Silver
  #2 (permalink)  
Antiguo 22/08/2009, 08:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: Ayuda con una query...

Lo que deseas hacer es un reporte, donde aparezcan listados en forma horizontal los valores acumulados de tres tablas distintas, las cuales se deben mostrar en forma vertical.
La única forma de lograr esto es usando SELECT únicos para cada tabla con agrupamiento, combinados a su vez entre si con UNION.
Para ello deben cumplir:
1. Cada SELECT debe devolver la misma cantidad de columnas, en el mismo orden y del mismo tipo de datos.
2. Como GROUP BY aquí opera sobre cada segmento, cada consulta deberá ser una subconsulta del tipo:
Código sql:
Ver original
  1. SELECT * FROM
  2.     (SELECT... FROM ... GROUP BY ) T1
  3. UNION  
  4. SELECT * FROM
  5.     (SELECT... FROM ... GROUP BY ) T2 ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 25/08/2009, 15:37
 
Fecha de Ingreso: agosto-2009
Mensajes: 2
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Ayuda con una query...

Hola gnzsoloyo,

Gracias por tu respuesta, pero los datos no saldrían de 3 tablas diferentes sino de la misma tabla... aquí el problema era como usar 3 COUNT para obtener la información resumida por "testname"... lo solucioné de la siguiente manera:
Código:
SELECT at.`testid` AS id, t.`iso` AS tests, 
COUNT(IF(at.`teststatusid`<4,1,NULL)) AS assigned, 
COUNT(IF(at.`teststatusid`=4,1,NULL)) AS incomplete, 
COUNT(IF(at.`teststatusid`=5,1,NULL)) AS complete 
FROM `assignedtests` at 
LEFT JOIN `tests` t ON t.`idtest` = at.`testid` 
LEFT JOIN `users` u ON u.`iduser` = at.`userid`
LEFT JOIN `teststatus` ts ON ts.`idteststatus` = at.`teststatusid`
WHERE u.`actualowner`=2  
GROUP BY id
Saludos,
Silver
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:11.