查询PostgreSQL的问题

时间:2017-10-30 08:40:21

标签: sql postgresql

我遇到一些无法解决的问题,表的结构如下:

孩子

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)

字母

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)

);

玩具

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),
);

我必须设计一个查询,允许为2010年之前出生的每个女孩获取 您订购的玩具总数。结果还必须包括 那些没有写过任何信件的女孩。具体来说我们想要的 女孩的名字,她的名字和城市以及订购的玩具总数 (例如Total_number)。

子表的性别列中的

只能是男性的“m”或女性的“f”

我必须使用加入吗?

我所拥有的部分就是这个

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';

1 个答案:

答案 0 :(得分:0)

select c.child_id,c.child_name,c.city, coalesce( number_toys,0) counted
  from 
  Child c
  left outer join letter l 
  on c.child_id=l.child_id
  where c.gender='m' and c.birth_date between <='2010/01/01';

    select c.child_id,c.child_name,c.city, count(wt.letter_id) actualToys
      from 
      Child c
      left outer join letter l 
      on c.child_id=l.child_id
      left outer join wished_toy wt on l.letter_id=wt.letter_id
      where c.gender='m' and c.birth_date between <='2010/01/01'
Group by 
c.child_id,c.child_name,c.city

计算数据库行引用的玩具而不是预定义的计数