显示运行时错误,哪里有问题,求解答

10-7 5-2 查询至少生产两种不同的计算机(PC或便携式电脑)且机器速度至少为133的厂商

本题目要求编写SQL语句,
查询至少生产两种不同型号的计算机(PC或便携式电脑)且机器速度至少为133的厂商,输出结果按照制造商升序排列。

提示:

本题有三种情况:
(1) 至少生产两种不同PC的厂商
(2) 至少生产两种不同便携式电脑的厂商
(3) 至少生产一种PC且至少生产一种便携式电脑的厂商。
表结构:

CREATE TABLE product
( maker CHAR(20) ,          --制造商
  model CHAR(20) NOT NULL,  --产品型号
  type CHAR(20),            --产品类型
  PRIMARY KEY(model)
);
CREATE TABLE pc
( model CHAR(20) NOT NULL,    --型号
  speed  DECIMAL(6,2),        --速度
  ram  INT,                   --内存
  hd DECIMAL(6,2),            --硬盘容量
  cd CHAR(4),                 --光驱
  price INT,                  --价钱
  PRIMARY KEY(model),
  FOREIGN KEY(model) REFERENCES product(model)
);
CREATE TABLE laptop
( model CHAR(20) NOT NULL,    --型号
  speed  DECIMAL(6,2),        --速度 
  ram  INT,                   --内存
  hd DECIMAL(6,2),            --硬盘容量
  screen DECIMAL(6,2),        --屏幕大小
  price INT,                  --价钱
  PRIMARY KEY(model),
  FOREIGN KEY(model) REFERENCES product(model) 
);

表样例
product表:

maker model type
D 2001 便携式电脑
D 2002 便携式电脑
E 2004 便携式电脑
D 3001 打印机
B 3002 打印机
A 1001 个人电脑
A 1002 个人电脑
A 1003 个人电脑
D 1008 个人电脑
pc表:

model speed ram hd cd price
1001 133.00 16 1.60 6X 1595
1002 120.00 16 1.60 6X 1399
1003 166.00 32 2.50 8X 1999
1008 180.00 32 2.00 8X 3699
laptop表:

model speed ram hd screen price
2001 100.00 20 1.10 9.50 1999
2002 133.00 12 0.75 11.30 2499
2004 133.00 16 1.10 11.20 3499
输出样例:
maker
A
D

select maker
from product inner join pc on product.model and pc.model inner join laptop on product.model and laptop.model as a
group by a.maker
having a.speed>=133 and count(a.maker)>=2;

img



select maker
    ,sum(case when speed>=133 then 1 else 0 end) `speed133+`
    ,sum(case when type='个人电脑' then 1 else 0 end) 个人电脑
    ,sum(case when type='便携式电脑' then 1 else 0 end) 便携式电脑
    ,count(0) 种类
    ,max(speed) as 最高速
from product p
left join (
    select * from pc
    union all
    select * from laptop
) b on p.model=b.model
group by maker
order by maker

img

这样试试

SELECT product.maker
FROM product
INNER JOIN pc ON product.model = pc.model
INNER JOIN laptop ON product.model = laptop.model
WHERE pc.speed >= 133
GROUP BY product.maker
HAVING COUNT(DISTINCT product.model) >= 2;

以下内容部分参考ChatGPT模型:


根据提问内容,可以编写如下SQL语句:

SELECT DISTINCT maker
FROM Product
WHERE type IN ('PC', 'Laptop') AND speed >= 133
GROUP BY maker
HAVING COUNT(DISTINCT type) >= 2

解释一下,首先从Product表中选择type为PC或Laptop且speed大于等于133的记录,然后按照maker进行分组,并统计每个分组中不同型号的计算机数量,最后筛选出至少有两种不同型号的计算机的厂商。DISTINCT用于去重,避免同一型号被计算多次。

希望能对你有所帮助。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632