我有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')。
答案 0 :(得分:1)
如何使用order by
和top
?
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 all
和top 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中的答案,而且戈登的说法更简洁,我会选择那个。