选择与最大字段相关

时间:2017-03-29 21:25:00

标签: sql sql-server

我有3张桌子:笔记本电脑,个人电脑,打印机,型号和价格字段。

我需要在所有表中的所有产品中获得最高价格。

我做了工会以获得最高价格&每个表的模型字段:

SELECT model,price 
FROM  (SELECT model, price 
       FROM pc 
       WHERE price = (SELECT MAX(price) FROM pc)
       UNION
       SELECT model, price 
       FROM laptop 
       WHERE price = (SELECT MAX(price) FROM laptop)
       UNION
       SELECT model, price 
       FROM printer WHERE price = (SELECT MAX(price) FROM printer)
      ) AS X

因此,我收到了

模特|价

 1233  | 980.0000
 1276  | 400.0000
 1288  | 400.0000
 1750  | 1200.0000

现在我只能以最高价格获得模型(在这种情况下它将是' 1750')。

2 个答案:

答案 0 :(得分:1)

如何使用order bytop

SELECT TOP 1 model, price
FROM  (SELECT model, price 
       FROM pc 
       UNION ALL
       SELECT model, price 
       FROM laptop 
       UNION ALL
       SELECT model, price 
       FROM printer
      ) t
ORDER BY price DESC;

注意:如果您有索引,这可能不是获取所需信息的最有效方法。如果性能有问题,您需要提供有关表格及其数据设计的更多信息。

答案 1 :(得分:1)

使用union alltop 1

select top 1 model, price 
from (
    select top 1 model, price 
    from pc 
    order by price desc

    union all

    select top 1 model, price 
    from laptop 
    order by price desc

    union all

    select top 1 model, price 
    from printer
    order by price desc
  ) as u
order by price desc

我不知道这是否会创建一个与戈登的答案不同的执行计划......我要去寻找。

这个答案产生了same query execution plan作为戈登在SQL Server 2012中的答案,而且戈登的说法更简洁,我会选择那个。