大家好,我是SQL查询新手,我正在livesql.oracle中学习Oracle。我有这个数据库,我需要创建查询来选择制造打印机比pc\笔记本电脑多的制造商。制造商属性仅在Product表中,所有表共有的属性是model。表信息:
table Laptop (serial_number varchar(50),
model,
price,
speed,
ram,
hd,
screen,
CONSTRAINT laptop_pk PRIMARY KEY (serial_number),
CONSTRAINT laptop_2_product_fk
FOREIGN KEY (model)
REFERENCES Product(model));
table Product (model varchar(50),
maker,
type,
CONSTRAINT product_pk PRIMARY KEY (model));
table Printer (serial_number varchar(50),
model,
price,
color,
type,
CONSTRAINT printer_pk PRIMARY KEY (serial_number),
CONSTRAINT printer_2_product_fk
FOREIGN KEY (model)
REFERENCES Product(model));
table PC (serial_number varchar(50),
model,
price,
speed,
ram,
hd,
cd,
CONSTRAINT pc_pk PRIMARY KEY (serial_number),
CONSTRAINT pc_2_product_fk
FOREIGN KEY (model)
REFERENCES Product(model));
table Storage (storage_id varchar(50),
model,
serial_number,
transfered_to);
我所能做的就是选择做打印机而不是笔记本电脑的制造商。也许我应该为笔记本电脑的状况做一些类似的东西,看看哪些制造商生产更多的打印机。
SELECT DISTINCT maker
FROM Product
WHERE type = 'printer'
AND maker NOT IN (
SELECT DISTINCT maker
FROM Product
WHERE type = 'laptop'
)
2条答案
按热度按时间qltillow1#
试试这个。在这里,我们使用LEFT JOIN将Product表与Printer和PC表联接起来,并使用COUNT函数计算每个制造商的打印机和PC/笔记本电脑的数量。然后,我们使用GROUP BY按制造商对结果进行分组,并使用HAVING子句对计数进行比较,以筛选出PC/笔记本电脑的产量多于打印机的制造商。
cnwbcb6i2#
按照您的说法,“单独的”表是无关紧要的,因为您需要知道的一切都包含在
product
表中:它包含制造商以及 * 硬件 * 类型(无论是打印机、笔记本电脑还是其他任何东西)。样本数据为:
查询使用条件聚合(在CTE中),而最终
select
返回打印机产量多于PC/笔记本电脑产量的制造商: