运行时错误,如何修改,求解答

10-8 5-3 查询生产最高速度的计算机(PC或便携式电脑)厂商

本题目要求编写SQL语句,
查询生产最高速度的计算机(PC或便携式电脑)厂商,查询结果按照厂商升序排列。

提示:请使用SELECT语句作答。

表结构:

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
D

select a.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 max(a.speed);//having的存在解决了where中无法使用聚集函数的问题

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) 种类
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

having max(a.speed) 这个表达式不完整。having是用于过滤聚合函数的结果,比如:having max(a.speed)>100、having sum(a.speed)>1000等,根据实际需求编写。
查询生产最高速度的计算机(PC或便携式电脑)厂商,查询结果按照厂商升序排列。你得先从pc和laptop中找到最高速度,然后根据这个最高速度找到有这个速度的厂商,按厂商排序。

as a是要干啥别命名?去掉试试 ,inner join laptop on product.model and laptop.model 这是什么 应该是
inner join laptop on product.model = pc.model?

可以看到,pc和laptop的表结构完全一致,所以应该先把它俩union all在一起
然后当做一个表来写left join

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


根据题目要求,可以使用如下SQL语句查询生产最高速度的计算机厂商:

SELECT maker
FROM product
WHERE type = 'PC' OR type = 'Laptop'
ORDER BY speed DESC
LIMIT 1;

解释:首先查询类型为PC或Laptop的产品,然后按照速度降序排列,最后取第一行的厂商名字,即为生产最高速度的计算机厂商。最后使用ORDER BY语句按照厂商升序排列。

需要注意的是,以上SQL语句是基于假设存在product表,其中包含了maker(厂商名)、type(产品类型)和speed(速度)三个字段。如果实际情况不同,需要根据实际情况进行修改。


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

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