SQL - Utilizar salida de query como entrada de otra

 
Vista:
sin imagen de perfil

Utilizar salida de query como entrada de otra

Publicado por Victor (4 intervenciones) el 16/01/2018 18:54:30
Buenas tardes, quiero utilizar la salida de una búsqueda como parámetro de entrada de otra, he visto el uso de subconsultas pero siempre dentro de las condiciones dentro de la propia búsqueda, no como me gustaría hacer. La idea es contar el numero de años en los que han salido mas de 200 películas, para ello mi idea es primero buscar los años en los que esas películas han salido y justo después contar cuantas filas hay (aunque se que me sale el numero de filas como información cuando ejecuto).

El motor que estoy usando es PostgreSQL

Lo que estoy intentando:

1
2
3
4
5
6
7
8
9
SELECT
 COUNT(release_year) AS Años_Buscados
    (SELECT
      COUNT(Años_Buscados)
     FROM films
     )
FROM films
GROUP BY release_year
HAVING COUNT(title)>10


Si ejecuto todo sin la subconsulta del segundo select me sale para cada año el numero de películas que han salido, que no es lo que busco.

A ver si me podeis echar una mano, muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Utilizar salida de query como entrada de otra

Publicado por Leonardo Josué (1173 intervenciones) el 17/01/2018 16:50:48
Hola Victor:

Creo entender tu problema y en realidad no estás muy alejado de la respuesta, es solo que estás haciendo un uso equivocado de las agrupaciones, Veamos un ejemplo:

Supongamos que tu tabla es más o menos así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> SELECT * FROM tabla;
+------+----------+------+
| id   | pelicula | anio |
+------+----------+------+
|    1 | uno      | 2017 |
|    2 | dos      | 2016 |
|    3 | tres     | 2017 |
|    4 | cuatro   | 2017 |
|    5 | cinco    | 2016 |
|    6 | seis     | 2018 |
|    7 | siete    | 2017 |
|    8 | ocho     | 2016 |
|    9 | nueve    | 2016 |
|   10 | diez     | 2015 |
+------+----------+------+
10 rows in set (0.02 sec)

entonces, si agrupamos por ANIO (AÑO) para saber cuantas películas han salido cada año, tendríamos algo así:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> SELECT anio, COUNT(1) total
    -> FROM tabla
    -> GROUP BY anio;
+------+-------+
| anio | total |
+------+-------+
| 2015 |     1 |
| 2016 |     4 |
| 2017 |     4 |
| 2018 |     1 |
+------+-------+
4 rows in set (0.02 sec)

Ahora, si sobre esta consulta, te interesa saber en qué años se publicaron 4 o más películas, utilizas esto como una subconsulta:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> SELECT * FROM
    -> ( SELECT anio, COUNT(1) total
    ->   FROM tabla
    ->   GROUP BY anio ) t
    -> WHERE t.total = 4;
+------+-------+
| anio | total |
+------+-------+
| 2016 |     4 |
| 2017 |     4 |
+------+-------+
2 rows in set (0.00 sec)

Y si te interesa saber CUANTOS, y no cuales años son, haces un COUNT, PERO YA NO HAY NECESIDAD DE AGRUPAR NI DE PONER LA CLÁUSULA HAVING:

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT COUNT(1) total FROM
    -> ( SELECT anio, COUNT(1) total
    ->   FROM tabla
    ->   GROUP BY anio ) t
    -> WHERE t.total = 4;
+-------+
| total |
+-------+
|     2 |
+-------+
1 row in set (0.00 sec)

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Utilizar salida de query como entrada de otra

Publicado por Victor (4 intervenciones) el 22/01/2018 10:19:08
Muchisimas gracias, Leo. Ha funcionado a la perfección como has dicho y ya entiendo mejor como funciona la subconsulta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar