我经常使用SO但从未注册过。我有一个问题,我坚持,我无法弄清楚如何获得正确的查询。首先,这个问题是参考www.sql-ex.ru及其在DML部分的练习10。
以下是所有信息:
数据库方案由四个表组成:产品(制造商,型号, 类型)PC(代码,型号,速度,内存,高清,CD,价格)笔记本电脑(代码,型号, 速度,内存,高清,屏幕,价格)打印机(代码,型号,颜色,类型, 价格)表“产品”包括有关制造商,型号的信息 数字和类型('PC','笔记本电脑'或'打印机')。假设是 Product表中的型号对于所有制造商而言都是独一无二的 产品类型。每台PC通过表“PC”中的代码唯一指定 以model为特征(引用Product表的外键), 速度(处理器的速度,以MHz为单位),RAM的总量 - ram(以Mb为单位), 硬盘驱动器容量 - 高清(以Gb为单位),CD ROM速度 - cd(例如, '4x')和价格。 “笔记本电脑”表与PC类似 除了CD ROM速度,它被屏幕尺寸取代 - 屏幕(以英寸为单位)。对于“打印机”表中的每台打印机,都会告诉它 打印机是否为彩色(颜色属性为'y'表示颜色 打印机;否则它是'n'),打印机类型(激光,喷射或矩阵), 和价格。
在Product表中添加Product表中的所有模型 没有在PC桌上。
除此之外,插入的模型必须具有以下规格:
代码应该等于模型编号加上插入操作前PC表中的最大代码值。
PC表中所有可用的相应值中,速度,RAM和HD容量以及CD速度应该是最大的。
- 醇>
价格应该是插入操作前PC表中所有PC的平均值。
这是我的查询:
INSERT INTO PC
SELECT
p.model + MAX(pc.code),
p.model,
MAX(pc.speed) speed,
MAX(pc.ram) ram,
MAX(pc.hd) hd,
MAX(pc.cd) cd,
AVG(pc.price) price
FROM
product p, pc pc
WHERE
type= 'pc'
AND
p.model NOT IN (SELECT model from pc)
GROUP BY
p.model
现在我得到了正确的结果,但出现以下错误:
您的查询在主数据库上生成了正确的结果集,但失败了 第二次测试,检查数据库。 *数据不匹配(1)
其常见问题解答意味着:
如果答案在逻辑上是正确的,那么它将始终被视为正确 回答。逻辑错误答案的可能性很小 被认为是对的。要弄清楚查询是否正确两个 使用具有相同结构和不同数据的数据库。如果 系统告诉您您的查询是错误的,但您可以看到匹配 结果,这意味着您的查询在第二个上给出了错误的答案 数据库。并且仍有可能在逻辑上不正确 查询将返回正确的结果集。这种可能性是可以的 通过准确的数据选择或使用两个以上来减少 用于检查查询的数据库。第二种方式不那么吸引人,因为它 将花费更多时间来回应用户。让我们注意一下 公式化查询应始终返回正确的结果,而不管 当前数据库状态。如果你有理由怀疑 查询判断的正确性,请将您的代码发送给 该系统的开发人员。
任何帮助将不胜感激!
答案 0 :(得分:2)
问题是cd速度被视为字符串而不是数字。 例如,2x超过16x。你必须让cd speed成为一个数字。
但它有' x'在它的结尾,你必须修剪。然后你可以把它投射到 编号并正确运行max()函数。最后你必须施展 它回到字符串并重新添加' x'到最后。
这是工作代码
INSERT INTO PC SELECT p.model + MAX(pc.code) code, p.model, MAX(pc.speed) speed, MAX(pc.ram) ram,
<
MAX(pc.hd) hd, CAST(MAX(CAST(REPLACE(pc.cd,'x','')AS int))AS varchar)+'x' cd, AVG(pc.price) price FROM product p INNER JOIN pc ON p.type= 'pc' WHERE p.model NOT IN (SELECT model from pc) GROUP BY p.model
其实感谢您的代码:) 我自己无法解决这个问题。 一旦我复制了你的,我就很快发现了这个问题:)