PostgreSQL - Problemas con una Query

   
Vista:

Problemas con una Query

Publicado por willy34 (2 intervenciones) el 30/10/2017 11:06:15
Tengo problemas para realizar una query ,pongo la estructura de las tablas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
child
 
CREATE TABLE CHILD(
child_id SMALLINT,
child_name VARCHAR(255) NOT NULL,
birth_date DATE NOT NULL,
gender VARCHAR(255) NOT NULL,
address VARCHAR(255),
city VARCHAR(255),
CONSTRAINT PK_CHILD PRIMARY KEY(child_id)
 
 
letter
 
CREATE TABLE LETTER(
letter_id SMALLINT,
arrival_date DATE NOT NULL,
number_toys INTEGER NOT NULL,
delivery_mode VARCHAR(255) NOT NULL,
child_id SMALLINT,
CONSTRAINT PK_LETTER PRIMARY KEY(letter_id),
CONSTRAINT CHILD_FK FOREIGN KEY (child_id) REFERENCES CHILD(child_id)
);
 
 
wished_toy
 
 CREATE TABLE WISHED_TOY(
 letter_id SMALLINT,
 toy_id SMALLINT,
 CONSTRAINT PK_WISHED_TOY PRIMARY KEY(letter_id, toy_id),
 CONSTRAINT LETTER_FK FOREIGN KEY (letter_id) REFERENCES LETTER(letter_id)
 CONSTRAINT LETTER_FK FOREIGN KEY (toy_id) REFERENCES TOY(toy_id)
);
 
toy
 
CREATE TABLE TOY(
toy_id SMALLINT,
toy_name VARCHAR (255) NOT NULL,
price DECIMAL NOT NULL,
toy_type VARCHAR(255) NOT NULL,
manufacturer VARCHAR(255) NOT NULL,
CONSTRAINT PK_TOY PRIMARY KEY(toy_id),
);

Tengo que diseñar una consulta que permita obtener para cada niña que nació antes de 2010 la cantidad total de juguetes que ha pedido. El resultado también debe incluir a aquellas niñas que no han escrito ninguna carta. Específicamente, queremos el identificador de la niña, su nombre y ciudad y la cantidad total de juguetes ordenados (como Total_number).

en la columna de gender de la tabla child solo puede ser "m" de masculino o "f" de femenino

¿Debo usar join?

la parte que tengo es esta

1
2
3
4
5
select c.child_id,c.child_name,c.city
  from letter l
  join child c
  on c.child_id=l.child_id
  where c.gender='m' and c.birth_date between <='2010/01/01';

Ahora mismo no se como continuar.
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

Problemas con una Query

Publicado por YYanes (12 intervenciones) el 30/10/2017 18:55:34
Hola hola Willy:

ante todo, decirle que hice un par de correcciones a su consulta: cambién el "m" por "f" ya que usted necesita preguntar realmente por las "niñas", ¿no?, y bueno, también eliminé el operador between al final de la misma ya que no era necesario. Bueno, vamos al asunto, pruebe con lo siguiente:

select CHILD.child_id, CHILD.child_name, CHILD.city,
(Select count(Wished_toy.toy_Id) from Letter join Wished_toy on (Wished_toy.letter_Id = Letter.letter_Id)
where Letter.child_id = CHILD.child_id) as Total_number

from CHILD
join LETTER on (CHILD.child_id=LETTER.child_id)
where CHILD.gender='f' and CHILD.birth_date < '2010/01/01'

group by CHILD.child_id, CHILD.child_name, CHILD.city, Total_number;

Como verá, estoy usando una consulta anidada para que calcule para cada niña el valor "Total_number", y es necesario agrupar al final o de lo contrario te repetirá valores innecesariamente. Es importante tener en cuenta que no es lo mismo "cantidad de solicitudes de un tipo de juguetes" que "cantidad de juguetes total solicitados", es decir, para contrar la cantidad de unidades (juguetes) sería necesario multiplicar la cantidad de solicitudes de un juguete por la cantidad de unidades solicitadas del mismo (ya que la niña pudo haber solicitado varias unidades de un juguete en una misma solicitud).
Lo que se muestra en esta solución que le ofrezco es la cantidad de solicitudes de un tipo de juguete realizadas. Pero bueno, esta solución la probé, y funciona! Espero haber ayudado en algo.

Un GigaSaludo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar