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

[SOLUCIONADO] Consulta múltiple, COUNT(*)

Estas en el tema de Consulta múltiple, COUNT(*) en el foro de Mysql en Foros del Web. Hola Acabo de empezar a usar MYysql y tengo unas dudas.. alguien podría ayudarme? muchas gracias! Tengo una tabla de authors (ref_author,name), papersinfo (ref_paper e ...
  #1 (permalink)  
Antiguo 29/11/2014, 14:09
 
Fecha de Ingreso: enero-2011
Mensajes: 14
Antigüedad: 13 años, 3 meses
Puntos: 0
Consulta múltiple, COUNT(*)

Hola
Acabo de empezar a usar MYysql y tengo unas dudas.. alguien podría ayudarme?
muchas gracias!
Tengo una tabla de authors (ref_author,name), papersinfo (ref_paper e información del artículo) y papersauthors, que relaciona los artículos con los autores.
Tengo que dar los artículos en los que "J_Gray" y"A_Szalay" han trabajado juntos.

He conseguido sacarlo mediante dos consultas:

Código SQL:
Ver original
  1. CREATE VIEW autores_GraySzalay AS
  2. SELECT ref_paper,COUNT(*) AS nauthor FROM papersauthors WHERE ref_author IN (SELECT ref_author FROM authors WHERE name IN ("J_Gray","A_Szalay")) GROUP BY ref_paper;

Código SQL:
Ver original
  1. CREATE VIEW coautores_GraySzalay AS
  2. SELECT title FROM papersinfo WHERE ref_paper IN (SELECT ref_paper FROM autores_GraySzalay
  3. WHERE nauthor ="2");
Código SQL:
Ver original
  1. SELECT * FROM coautores_GraySzalay;

Pero querría unirlas, y lo he hecho así:

Código SQL:
Ver original
  1. SELECT title FROM papersinfo
  2. WHERE ref_paper IN (SELECT ref_paper FROM papersauthors
  3. WHERE nauthor IN (SELECT COUNT(*) AS nauthor FROM papersauthors
  4. WHERE ref_author IN (SELECT ref_author FROM authors WHERE name IN ("J_Gray","A_Szalay"))
  5. GROUP BY ref_paper) AND nauthor=2);

Me da error y no reconoce "nauthor".

Cómo podría arreglarlo?
Veis alguna forma de hacerlo más fácil?

Muchas gracias!!

Última edición por gnzsoloyo; 29/11/2014 a las 14:55
  #2 (permalink)  
Antiguo 29/11/2014, 18:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta múltiple, COUNT(*)

Lo que tienes es demasiado complicado...
Código MySQL:
Ver original
  1. SELECT  title
  2. FROM    papersinfo PI
  3.     INNER JOIN papersauthors PA ON PI.ref_paper = PA.ref_paper
  4.     INNER JOIN authors A ON PA.nauthor A.nauthor
  5. WHERE A.name IN ('J_Gray' , 'A_Szalay')
  6. GROUP BY PI.ref_paper
  7. HAVING COUNT(*) = 2;

Posdata: No repitas posts, las Políticas de Uso dicen expresamente que no se debe hacer y que serán eliminados in previo aviso.
__________________
¿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 30/11/2014, 03:38
 
Fecha de Ingreso: enero-2011
Mensajes: 14
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Consulta múltiple, COUNT(*)

Hola
Muchas gracias.
No sabía que había repetido el post.. no se me actualizaba la página e igual lo mandé más de una vez pensando que no se había cargado.

He cambiado nauthor por ref_author.. nauthor lo había creado yo al agrupar los authores por autor.
Así me funciona, muchas gracias!!
  #4 (permalink)  
Antiguo 30/11/2014, 17:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta múltiple, COUNT(*)

No sigas replicando el mismo tema para poder avanzar con él.
Continua en este hilo...

Sólo abres otro tema si el que quieres tratar es diferente, y no una continuidad.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 30/11/2014, 17:54
 
Fecha de Ingreso: enero-2011
Mensajes: 14
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Consulta múltiple, COUNT(*)

Perdón. Como era otra pregunta pensaba que tenía que abrir otro tema.

Tengo que calcular el índice de artículos de la universidad de Standford por investigador y año en la década de 1998-2008.

Tengo las siguientes tablas:
afiliations: ref_afiliation, name
authorafiliation: ref_afiliation,ref_author
papersauthor: ref_paper,ref_paper
authors: ref_paper,name
papersinfo:ref_paper,publiyear

Esto es lo que he hecho pero creo que o está del todo bien

Código MySQL:
Ver original
  1. CREATE VIEW paper_author AS
  2. SELECT ref_author, ref_paper FROM papersauthors WHERE ref_paper IN
  3. (SELECT ref_paper FROM papersinfo WHERE publiyear BETWEEN 1998 AND 2008) AND ref_author IN
  4.  (SELECT ref_author FROM authorafilIation WHERE ref_afiliation IN (SELECT ref_afiliation FROM afiliations WHERE university IN
  5. ("Stanford_University")));
Código MySQL:
Ver original
  1. SELECT ref_author,papersinfo.publiyear, COUNT(*)FROM paper_author INNER JOIN
  2. papersinfo ON  paper_author.ref_paper =papersinfo.ref_paper GROUP BY publiyear ORDER BY ref_author;
Gracias!

Última edición por gnzsoloyo; 30/11/2014 a las 18:32

Etiquetas: múltiple, select, sql, tabla
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 00:06.