【问题标题】:value is type of a and bvalue 是 a 和 b 的类型
【发布时间】:2013-06-13 14:01:14
【问题描述】:

对于给定的数据库

Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)

问题是: 在 RAM 最低的 PC 中,寻找同时生产 RAM 最低、处理器速度最快的 PC 的打印机制造商。结果集:制造商。

让我们拆分查询!

  • 寻找也生产 PC 的打印机制造商

SELECT DISTINCT maker from product Group By maker,type HAVING type IN('打印机','PC')

我认为这是错误的,因为 IN('Printer','PC') 就像 OR not AND

  • RAM 最低的电脑

SELECT model,speed FROM pc WHERE ram=(SELECT MIN(ram) FROM pc) as minimumRam

  • 在最低 RAM 的 PC 中速度最高的处理器
WHERE
lowestRam.speed=(SELECT MAX(speed) FROM pc WHERE ram=(SELECT MIN(ram) FROM pc))

查询自己!

SELECT DISTINCT maker FROM
(SELECT DISTINCT model,speed FROM pc WHERE ram=(SELECT MIN(ram) FROM pc)) as lowestRam
INNER JOIN product 
ON product.model=lowestRam.model
WHERE
lowestRam.speed=(SELECT max(speed) FROM pc WHERE ram=(SELECT MIN(ram) FROM pc))
Group By maker,type HAVING type IN( 'Printer' ,'PC')

不幸的是,当我在检查网站上提交查询时,它会产生 1 个额外的错误结果:(

问题来自Link。 查询验证有 2 个步骤。第二步仅显示用户和正确结果之间的差异:(

【问题讨论】:

  • 额外的意外结果是什么?
  • 我使用这个站点来学习 sql sql-ex.ru(问题 #25)。查询验证有 2 个步骤。第二步只显示用户和正确结果之间的区别:(
  • 我有一点建议:几乎所有需要 DISTINCT 关键字才能正常工作的查询都不正确 :)

标签: sql


【解决方案1】:

这应该可以解决您的问题:

select distinct maker from Product
where type = 'Printer' and maker in (select maker
from Product join PC on Product.model = PC.model
where ram = (select min(ram) from PC) and speed = (select max(speed) from PC 
where ram = (select min(ram) from PC)))

【讨论】:

    【解决方案2】:

    从我所见,您的查询看起来是正确的(虽然有点过于复杂)。如果您可以提供示例数据和“额外的错误结果”,那么追查问题会更容易。

    这是我的简化版查询:

    SELECT DISTINCT p1.maker
    FROM product p1, pc
    WHERE  p1.model = pc.model
       AND pc.speed = (SELECT MAX (speed)
                       FROM pc
                       WHERE ram = (SELECT MIN (ram) FROM pc))
       AND EXISTS (SELECT 1 from product p2 where maker = p1.maker and p2.type = 'Printer')  
    

    【讨论】:

    • “错误的记录数(多 2 条)”我认为 product.TYPE IN ('PC', 'Printer') 是错误的,因为它类似于 OR 不是 AND。数据库中有只生产打印机或电脑的厂商
    • 我更新了查询以强制制造商也生产打印机。
    • +1 仍然错误但更接近 :) “记录数错误(多 1)”
    • 我创建了一些测试数据,它对我有用。同样,没有看到您正在使用的数据,我找不到您的具体问题。您提供的链接需要登录,因此我们无法访问它。
    • 我也看不到数据:(看我的回答,我终于搞定了:)
    【解决方案3】:

    试试这个:

        SELECT p.maker 
    FROM
    (
    SELECT *,DENSE_RANK() OVER (ORDER BY ram ASC,speed DESC) AS Rnk
    FROM Product p
    INNER JOIN (SELECT maker
                FROM Product 
                WHERE type IN ('PC','printer')
                GROUP BY maker
                HAVING COUNT(DISTINCT type)=2
               )p1
    ON p1.maker = p.maker
    INNER JOIN PC  
    ON PC.model = p.model
    )t
    WHERE Rnk=1
    

    【讨论】:

    • 你知道它使用的是什么语言吗? T-SQL? PL/SQL?
    【解决方案4】:
    SELECT  DISTINCT maker
      FROM product
     WHERE model IN (
        SELECT p.model
          FROM pc p JOIN printer r 
                      ON (p.ram =(SELECT min(ram) FROM pc) AND  
                          p.speed=(SELECT max(speed) FROM pc WHERE ram = 
                                  (SELECT min(ram) FROM pc))
                         )
                     )
    

    【讨论】:

      【解决方案5】:
       SELECT DISTINCT maker FROM    
       (SELECT DISTINCT model,speed FROM pc WHERE ram=(SELECT MIN(ram) FROM pc)) as lowestRam
       INNER JOIN product 
             ON product.model=lowestRam.model AND
       lowestRam.speed=(SELECT max(speed) FROM pc WHERE ram=(SELECT MIN(ram) FROM pc))
       Group By maker HAVING maker IN( SELECT DISTINCT maker FROM Product WHERE type='Printer')
      

      【讨论】:

        【解决方案6】:

        选择不同的制造商 从产品,pc product.model 在哪里 (选择型号 从电脑 其中速度(从 pc 组中选择最大(速度)按 ram) 并撞进去 (从 pc 中选择 ram,其中 ram 在(从 pc 中选择 min(ram))) 和 product.maker in(从 type = 'printer' 的产品中选择制造商) 和 Product.model=PC.model

        【讨论】:

          【解决方案7】:

          你可以试试这个:

          SELECT DISTINCT G.MAKER FROM PC F,PRODUCT G
          WHERE 
          F.MODEL = G.MODEL
          AND F.SPEED=
          (
            SELECT MAX(E.SPEED) FROM PC E WHERE E.RAM =
            (
             SELECT MIN(C.RAM) FROM PC C,PRODUCT D WHERE D.MAKER IN 
                    (SELECT A.MAKER FROM PRODUCT A,PRINTER B WHERE A.MODEL=B.MODEL)
            )
          )
          

          【讨论】:

            【解决方案8】:

            从产品中选择不同的制造商,PC where product.model=PC.model and product.type='PC' and speed=(select max(PC.speed) from PC where ram=(select min(PC.ram)来自PC))

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-07-28
              • 1970-01-01
              • 2021-08-25
              • 1970-01-01
              • 2012-03-18
              • 1970-01-01
              • 2014-01-05
              • 1970-01-01
              相关资源
              最近更新 更多