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

[SOLUCIONADO] Necesito saber que query debo correr en el esquema dado para obtener el resultado en

Estas en el tema de Necesito saber que query debo correr en el esquema dado para obtener el resultado en en el foro de Bases de Datos General en Foros del Web. Mas abajo hay tres tablas para una db que para las pruebas la uso en sqlite La query que quiero resolver es una que me ...
  #1 (permalink)  
Antiguo 18/07/2015, 23:36
 
Fecha de Ingreso: julio-2015
Mensajes: 2
Antigüedad: 8 años, 9 meses
Puntos: 0
Necesito saber que query debo correr en el esquema dado para obtener el resultado en

Mas abajo hay tres tablas para una db que para las pruebas la uso en sqlite
La query que quiero resolver es una que me liste el nombre de todos los alumnos inscriptos en todas las materias.
Entiendo que se puede resolver con una sola consulta pero las que probe no me sirvieron.

Con:

Código SQL:
Ver original
  1. SELECT m.nombre, COUNT(i.id_materia) AS AlumMat
  2. FROM inscripcion AS i
  3. LEFT JOIN materia AS m
  4. ON m.id=i.id_materia
  5. GROUP BY i.id_materia
  6. ORDER BY AlumMat DESC;

Pude sacar una lista de las materias y cantidad de inscriptos

Comn esta otra.

Código SQL:
Ver original
  1. SELECT a.nombre, COUNT(i.id_materia) AS NumOfMat FROM (alumno AS a
  2. INNER JOIN inscripcion AS i
  3. ON a.id=i.id_alumno)
  4. GROUP BY i.id_materia
  5. HAVING COUNT(i.id_materia) > 4
  6. ORDER BY NumOfMat DESC;

Alumnos incriptos en mas de 4 materias
Se me complico con la lista de alumnos inscriptos en todas las materias.

La idea es que sea SQL lo mas standard posible, si tienen la solucion para algun motor en particular sirve tambien. Logre algo usando VIEWS

Gracias

Código SQL:
Ver original
  1. PRAGMA foreign_keys=OFF;
  2. BEGIN TRANSACTION;
  3. CREATE TABLE 'alumno' (
  4. 'id' INT NOT NULL,
  5. 'nombre' VARCHAR(45) NULL,
  6. PRIMARY KEY ('id')
  7. );
  8. INSERT INTO "alumno" VALUES(1,'Lara');
  9. INSERT INTO "alumno" VALUES(2,'Nestor');
  10. INSERT INTO "alumno" VALUES(3,'Juan');
  11. INSERT INTO "alumno" VALUES(4,'Pedro');
  12. INSERT INTO "alumno" VALUES(5,'Jose');
  13. INSERT INTO "alumno" VALUES(6,'Igor');
  14. INSERT INTO "alumno" VALUES(7,'Steve');
  15. INSERT INTO "alumno" VALUES(9,'Otto');
  16. INSERT INTO "alumno" VALUES(8,'Bart');
  17. INSERT INTO "alumno" VALUES(10,'Lisa');
  18. COMMIT;
  19.  
  20. PRAGMA foreign_keys=OFF;
  21. BEGIN TRANSACTION;
  22. CREATE TABLE 'materia' (
  23. 'id' INT NOT NULL,
  24. 'nombre' VARCHAR(45) NULL,
  25. PRIMARY KEY ('id')
  26. );
  27. INSERT INTO "materia" VALUES(1,'Math');
  28. INSERT INTO "materia" VALUES(2,'English');
  29. INSERT INTO "materia" VALUES(3,'Anatomy');
  30. INSERT INTO "materia" VALUES(4,'Chinese');
  31. INSERT INTO "materia" VALUES(5,'Spanish');
  32. INSERT INTO "materia" VALUES(6,'Italian');
  33. INSERT INTO "materia" VALUES(7,'Gym');
  34. INSERT INTO "materia" VALUES(8,'Sociology');
  35. INSERT INTO "materia" VALUES(9,'Magic');
  36. INSERT INTO "materia" VALUES(10,'Blood');
  37. COMMIT;
  38.  
  39. PRAGMA foreign_keys=OFF;
  40. BEGIN TRANSACTION;
  41. CREATE TABLE 'inscripcion' (
  42. 'id_alumno' INT NOT NULL,
  43. 'id_materia' INT NOT NULL,
  44. PRIMARY KEY ('id_materia', 'id_alumno'));
  45. INSERT INTO "inscripcion" VALUES(1,1);
  46. INSERT INTO "inscripcion" VALUES(1,2);
  47. INSERT INTO "inscripcion" VALUES(1,3);
  48. INSERT INTO "inscripcion" VALUES(1,4);
  49. INSERT INTO "inscripcion" VALUES(1,5);
  50. INSERT INTO "inscripcion" VALUES(1,6);
  51. INSERT INTO "inscripcion" VALUES(1,7);
  52. INSERT INTO "inscripcion" VALUES(1,8);
  53. INSERT INTO "inscripcion" VALUES(1,9);
  54. INSERT INTO "inscripcion" VALUES(1,10);
  55. INSERT INTO "inscripcion" VALUES(2,1);
  56. INSERT INTO "inscripcion" VALUES(2,3);
  57. INSERT INTO "inscripcion" VALUES(3,1);
  58. INSERT INTO "inscripcion" VALUES(3,3);
  59. INSERT INTO "inscripcion" VALUES(4,1);
  60. INSERT INTO "inscripcion" VALUES(5,1);
  61. INSERT INTO "inscripcion" VALUES(5,2);
  62. INSERT INTO "inscripcion" VALUES(5,3);
  63. INSERT INTO "inscripcion" VALUES(5,5);
  64. INSERT INTO "inscripcion" VALUES(5,6);
  65. INSERT INTO "inscripcion" VALUES(6,2);
  66. INSERT INTO "inscripcion" VALUES(6,4);
  67. INSERT INTO "inscripcion" VALUES(6,6);
  68. INSERT INTO "inscripcion" VALUES(7,3);
  69. INSERT INTO "inscripcion" VALUES(7,4);
  70. INSERT INTO "inscripcion" VALUES(8,2);
  71. INSERT INTO "inscripcion" VALUES(8,4);
  72. INSERT INTO "inscripcion" VALUES(8,7);
  73. INSERT INTO "inscripcion" VALUES(9,7);
  74. INSERT INTO "inscripcion" VALUES(10,3);
  75. COMMIT;

Última edición por gnzsoloyo; 21/07/2015 a las 06:09
  #2 (permalink)  
Antiguo 19/07/2015, 05:20
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Necesito saber que query debo correr en el esquema dado para obtener el re

si te entendi bien, quieres que nada mas salga el alumno que tiene todas las materias, en este ejemplo Lara vdd??

Código SQL:
Ver original
  1. CREATE TABLE #alumno (
  2. id INT NOT NULL,
  3. nombre VARCHAR(45) NULL,
  4. PRIMARY KEY (id)
  5. );
  6. INSERT INTO #alumno VALUES(1,'Lara');
  7. INSERT INTO #alumno VALUES(2,'Nestor');
  8. INSERT INTO #alumno VALUES(3,'Juan');
  9. INSERT INTO #alumno VALUES(4,'Pedro');
  10. INSERT INTO #alumno VALUES(5,'Jose');
  11. INSERT INTO #alumno VALUES(6,'Igor');
  12. INSERT INTO #alumno VALUES(7,'Steve');
  13. INSERT INTO #alumno VALUES(9,'Otto');
  14. INSERT INTO #alumno VALUES(8,'Bart');
  15. INSERT INTO #alumno VALUES(10,'Lisa');
  16.  
  17.  
  18. CREATE TABLE #materia (
  19. id INT NOT NULL,
  20. nombre VARCHAR(45) NULL,
  21. PRIMARY KEY (id)
  22. );
  23. INSERT INTO #materia VALUES(1,'Math');
  24. INSERT INTO #materia VALUES(2,'English');
  25. INSERT INTO #materia VALUES(3,'Anatomy');
  26. INSERT INTO #materia VALUES(4,'Chinese');
  27. INSERT INTO #materia VALUES(5,'Spanish');
  28. INSERT INTO #materia VALUES(6,'Italian');
  29. INSERT INTO #materia VALUES(7,'Gym');
  30. INSERT INTO #materia VALUES(8,'Sociology');
  31. INSERT INTO #materia VALUES(9,'Magic');
  32. INSERT INTO #materia VALUES(10,'Blood');
  33.  
  34.  
  35. CREATE TABLE #inscripcion (
  36. id_alumno INT NOT NULL,
  37. id_materia INT NOT NULL,
  38. PRIMARY KEY (id_materia, id_alumno));
  39.  
  40. INSERT INTO #inscripcion VALUES(1,1);
  41. INSERT INTO #inscripcion VALUES(1,2);
  42. INSERT INTO #inscripcion VALUES(1,3);
  43. INSERT INTO #inscripcion VALUES(1,4);
  44. INSERT INTO #inscripcion VALUES(1,5);
  45. INSERT INTO #inscripcion VALUES(1,6);
  46. INSERT INTO #inscripcion VALUES(1,7);
  47. INSERT INTO #inscripcion VALUES(1,8);
  48. INSERT INTO #inscripcion VALUES(1,9);
  49. INSERT INTO #inscripcion VALUES(1,10);
  50. INSERT INTO #inscripcion VALUES(2,1);
  51. INSERT INTO #inscripcion VALUES(2,3);
  52. INSERT INTO #inscripcion VALUES(3,1);
  53. INSERT INTO #inscripcion VALUES(3,3);
  54. INSERT INTO #inscripcion VALUES(4,1);
  55. INSERT INTO #inscripcion VALUES(5,1);
  56. INSERT INTO #inscripcion VALUES(5,2);
  57. INSERT INTO #inscripcion VALUES(5,3);
  58. INSERT INTO #inscripcion VALUES(5,5);
  59. INSERT INTO #inscripcion VALUES(5,6);
  60. INSERT INTO #inscripcion VALUES(6,2);
  61. INSERT INTO #inscripcion VALUES(6,4);
  62. INSERT INTO #inscripcion VALUES(6,6);
  63. INSERT INTO #inscripcion VALUES(7,3);
  64. INSERT INTO #inscripcion VALUES(7,4);
  65. INSERT INTO #inscripcion VALUES(8,2);
  66. INSERT INTO #inscripcion VALUES(8,4);
  67. INSERT INTO #inscripcion VALUES(8,7);
  68. INSERT INTO #inscripcion VALUES(9,7);
  69. INSERT INTO #inscripcion VALUES(10,3);
  70.  
  71.  
  72. SELECT nombre FROM(
  73. SELECT t2.nombre,COUNT(t3.nombre) total FROM #inscripcion AS t1
  74. LEFT JOIN #alumno AS t2 ON (t1.id_alumno=t2.id)
  75. LEFT JOIN #materia AS t3 ON (t1.id_materia=t3.id)
  76. GROUP BY t2.nombre) AS t1 WHERE total=(SELECT COUNT(*) FROM #materia)

Con ese query obtenemos lo que necesitas solamente al alumno que tiene tooodas las materias en este caso Lara :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 21/07/2015, 06:03
 
Fecha de Ingreso: julio-2015
Mensajes: 2
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Necesito saber que query debo correr en el esquema dado para obtener el re

Excelente.
Muchas gracias.
Lo estoy viendo para entender mejor y aplicarlo la próxima.
Que usas para tener que poner el "#" delante del nombre de las tablas?
Nuevamente muchas gracias, pensé que nadie iba a responder.
Saludos
  #4 (permalink)  
Antiguo 21/07/2015, 06:11
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: Necesito saber que query debo correr en el esquema dado para obtener el re

Libras te pone ejemplos en SQL Server para que tu los tomes como referencia y luego los adaptes a tu DBMS (Si no me equivoco estás usando SQLite).
Fijate en el manual de referencia cómo se hace en tu caso, para tu DBMS. Cada uno de ellos tiene sus propias características (Oracle y MySQL lo hacen de otras formas, por ejemplo).
__________________
¿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 22/07/2015, 12:53
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Necesito saber que query debo correr en el esquema dado para obtener el re

Cita:
Iniciado por enehh Ver Mensaje
Excelente.
Muchas gracias.
Lo estoy viendo para entender mejor y aplicarlo la próxima.
Que usas para tener que poner el "#" delante del nombre de las tablas?
Nuevamente muchas gracias, pensé que nadie iba a responder.
Saludos
Son tablas temporales en sql server, no tengo tus datos por lo que hice tablas temporales......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: query, sql
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 08:02.