2015-01-07 1 views
-1

Структура таблицы:Hard SQL Update запрос с aggreration

Auto(model int (key),year int (key),country varchar) 
Store(name varchar(key),country varchar,model int (key),price int) 

Обновление магазины, которые продает только модели, которые не производятся в стране, что магазин существует в, таким образом: если цена модели в магазин максимален по отношению ко всем моделям во всех магазинах той же страны, а затем меняет цену со средним значением всех цен той же модели во всех магазинах той же страны. (Auto.country там, где он изготовлен).

То, где я нахожусь. не уверен, что это правильно.

UPDATE ... 
SET ... 
FROM ... 
WHERE model in 
    (
    SELECT DISTINCT model 
    FROM Auto,Store 
    WHERE Auto.model=Store.model 
     AND Auto.country!=Store.country 
    ) 

Не могу понять это. Спасибо за помощь.

+0

Опубликовать свой запрошенный sql-запрос? – HaveNoDisplayName

+0

Я буду только его очень маленькой частью ответа. – Signer3

+1

которые вы используете? –

ответ

1

ломать.

магазины, которые продают отечественные автомобили

SELECT store_id FROM Store s JOIN Auto a USING (model) 
WHERE a.country = s.country 

магазины, которые продают ТОЛЬКО иномарки

SELECT store_id from Store where store_id NOT IN (
    SELECT store_id FROM Store s JOIN Auto a USING (model) 
    WHERE a.country = s.country 
) 

обновления

UPDATE Stores 
SET ... 
WHERE store_id IN (
    SELECT store_id from Store where store_id NOT IN (
     SELECT store_id FROM Store s JOIN Auto a USING (model) 
     WHERE a.country = s.country 
    ) 
) 
  • я только что заметил, что вы используете имя вместо store_id

Также ваша схема таблиц не соответствует нормальной форме. Store.name и Store.country. Вы должны рассмотреть вопрос о ...

Store (id, name, country) 
Auto (id, model, year, country) 
Store_Auto (store_id, auto_id, price) 
0

Вы хотите обновить Store строки, так что ...

UPDATE Store s 

Вы хотите установить значение в (только) в price колонки, так что ...

SET price = 

... и вы хотите, чтобы цена будет в среднем по модели автомобиля в стране магазина, так что ...

(SELECT AVG(price) 
    FROM Store s2 
    WHERE s2.model = s.model AND s2.country = s.country) 

Вы хотите сделать это только для строк, имеющих максимальную цену за свою страну, так что ...

WHERE s.price = (
    SELECT MAX(price) 
    FROM Store s3 
    WHERE s3.country = s.country AND s3.model = s.model 
) 

... и только для магазинов, которые не продают любые отечественные модели, так .. .

AND s.name NOT IN (
    SELECT name 
    FROM 
     Store s4 
     JOIN Auto 
     ON s4.model = Auto.model 
    WHERE 
     s4.country = Auto.country 
)