Использование MAX с несколькими таблицами - PullRequest
3 голосов
/ 20 июля 2011

У меня есть четыре таблицы: продукты, компьютер, ноутбук и принтер.

    Products(maker, model, type)
    PC(code, model, speed, hd, cd, price)
    Laptop(code, model, speed, ram, hd, screen, price)
    Printer(code, model, color, type price)

Мне нужно найти номер модели продукта (ПК, ноутбука или принтера), который имеет самую высокую цену. Это не будет работать с оператором регистра, потому что, если два номера модели имеют самую высокую цену, оба должны отображаться, и при использовании регистра выбирается только один, а затем завершается оператор регистра. Я хотел бы сделать это с помощью оператора UNION, но я не уверен, как это сделать. Это то, что я до сих пор:

SELECT model FROM 
(SELECT model, MAX(price) FROM 
(SELECT model, price FROM Pc UNION ALL SELECT model, price FROM Laptop UNION ALL 
 SELECT model, price FROM Printer) 
 GROUP BY model)

Но это неправильный синтаксис, и я не уверен, почему. Есть идеи?

Ответы [ 5 ]

3 голосов
/ 09 мая 2012
Select datatable.model as price from (
    Select P.model,P.price from PC P where P.price=(select Max(Q.price) from PC Q)
    Union 
    Select P.model,P.price from Laptop P where P.price=(select Max(Q.price) from Laptop Q)
    Union 
    Select P.model,P.price from Printer P where P.price=(select Max(Q.price) from Printer Q)
) as datatable where datatable.price=(
    Select Max(newtable.price) as price from (
        Select P.model,P.price from PC P where P.price=(select Max(Q.price) from PC Q)
        Union 
        Select P.model,P.price from Laptop P where P.price=(select Max(Q.price) from Laptop Q)
        Union 
        Select P.model,P.price from Printer P where P.price=(select Max(Q.price) from Printer Q)) as newtable)
1 голос
/ 11 июня 2014

Это моё решение и оно работает.Я уже пробовал это.

WITH PRICE_MAX AS (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))

select model from PRICE_MAX
where price = (select Max(price) 
               from PRICE_MAX)
1 голос
/ 20 июля 2011

Вам нужно создать псевдоним для своих производных таблиц: см. Этот пост


Редактировать: это должно работать, чтобы получить модели с максимальной ценой. (Я не уверен, что это правильный синтаксис для сервера sql.)

with max_price(price) as (
  SELECT MAX(price)
       FROM (
          SELECT price
          FROM Pc
          UNION ALL
          SELECT price
          FROM Laptop
          UNION ALL 
          SELECT price
          FROM Printer
       ) as sub1
)

SELECT model, price
FROM (
   SELECT model, price
   FROM Pc
   UNION ALL
   SELECT model, price
   FROM Laptop
   UNION ALL 
   SELECT model, price
   FROM Printer
) as sub2
JOIN max_price m ON m.price = sub2.price
0 голосов
/ 24 января 2014
Select b.model from
(Select a.model, Max(a.price) as price from
(Select model, MAX(price) as price from PC group by model
union
Select model, MAX(price) as price from Laptop group by model
union
Select model, MAX(price) as price from Printer group by model)a
Group by a.model)b
where b.price=(Select Max(c.price) from(Select model, MAX(price) as price from PC group by model
union
Select model, MAX(price) as price from Laptop group by model
union
Select model, MAX(price) as price from Printer group by model)c)
0 голосов
/ 26 июня 2013
select model 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 G
where price = (
select max(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 T
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...