首页 > 解决方案 > SQL-EX.RU (Exercise #137) -- 在第二个检查数据库上返回不正确的数据集

问题描述

我的查询有什么问题?

简短的数据库描述“计算机公司”:

数据库方案由四个表组成: Product(maker, model, type) PC(code, model, speed, ram, hd, cd, price) Laptop(code, model, speed, ram, hd, screen, price) Printer(代码、型号、颜色、类型、价格)产品表包含有关制造商、型号和产品类型(“PC”、“笔记本电脑”或“打印机”)的数据。假定产品表中的型号对于所有制造商和产品类型都是唯一的。PC 表中的每台个人计算机均由唯一代码明确标识,并通过其型号(外键指产品表)、处理器速度(以 MHz 为单位)-速度字段、RAM 容量(以 Mb 为单位)-ram 进行额外表征,硬盘驱动器容量(以 Gb 为单位)- hd,CD-ROM 速度(例如,'4x')- cd,及其价格。笔记本电脑桌类似于PC桌,除了 CD-ROM 速度,它包含屏幕大小(以英寸为单位) - 屏幕。对于打印机表中的每个打印机型号,其输出类型('y' 表示彩色,'n' 表示单色)- 颜色字段、打印技术('Laser'、'Jet' 或 'Matrix')- 类型和价格被指定。

我的结果如下:

“您的查询在第一个(可用)数据库上返回了正确的数据集,但在第二个检查数据库上返回了不正确的数据集。错误的记录数(超过 7 个)”

;WITH ORD_NUM_CTE
AS
(
    SELECT ROW_NUMBER() OVER (ORDER BY model) 'ORD_NUM'
    ,      *                                 
    FROM Product
)

SELECT onc.[type]
,      COALESCE((select AVG(price)
            from Printer
            WHERE model = onc.model) 
            ,      (select AVG(price)
            from Laptop
            WHERE model = onc.model) 
            ,      (select AVG(price)
            from PC
            WHERE model = onc.model) 
            ) 'avg_price'
--,      *
FROM      ORD_NUM_CTE onc
left JOIN PC          pc  ON onc.model = pc.model
left JOIN Laptop      lt  ON onc.model = lt.model
left JOIN Printer     pr  ON onc.model = pr.model
WHERE onc.ORD_NUM % 5 = 0

标签: sql-server-2008

解决方案


推荐阅读