SQL DML练习10

时间:2014-02-22 17:27:38

标签: sql dml

我经常使用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桌上。

     

除此之外,插入的模型必须具有以下规格:

     
      
  1. 代码应该等于模型编号加上插入操作前PC表中的最大代码值。

  2.   
  3. PC表中所有可用的相应值中,速度,RAM和HD容量以及CD速度应该是最大的。

  4.   
  5. 价格应该是插入操作前PC表中所有PC的平均值。

  6.   

这是我的查询:

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)

其常见问题解答意味着:

  

如果答案在逻辑上是正确的,那么它将始终被视为正确   回答。逻辑错误答案的可能性很小   被认为是对的。要弄清楚查询是否正确两个   使用具有相同结构和不同数据的数据库。如果   系统告诉您您的查询是错误的,但您可以看到匹配   结果,这意味着您的查询在第二个上给出了错误的答案   数据库。并且仍有可能在逻辑上不正确   查询将返回正确的结果集。这种可能性是可以的   通过准确的数据选择或使用两个以上来减少   用于检查查询的数据库。第二种方式不那么吸引人,因为它   将花费更多时间来回应用户。让我们注意一下   公式化查询应始终返回正确的结果,而不管   当前数据库状态。如果你有理由怀疑   查询判断的正确性,请将您的代码发送给   该系统的开发人员。

任何帮助将不胜感激!

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
<

其实感谢您的代码:) 我自己无法解决这个问题。 一旦我复制了你的,我就很快发现了这个问题:)