MIX
FORUM
.SU

Регистрация
Справка
Календарь

Текущий ответ на "секретный" вопрос - Суббота293
Путеводитель по форумуМиксометр
weightclass
ф у н т ы
=
к г
Полутяжелый (до 93 кг)
Полутяжелый (до 93 кг)
height
ф у т ы
д ю й м ы
11
10
9
+ -
=
с м

SQL

Разговоры произвольные темы, разговоры обо всем


Ответ
 
Опции темы
SQL
Старый
  (#1)  |  (на пост)
Сейчас вне форума
Аватар для dar
Сообщений: 3,046
Миксов: 500
Рейтинг мнений: 3554
Сказал(а) спасибо: 3,712
Поблагодарили: 4,082
Регистрация: 25.08.2011
Адрес: Киев
Users Flag!
SQL - 25.04.2012, 15:06

Товарищи, тут такая штука, может кто отлично шарит в sql..
вот задача и ответ..вопрос следующий, что это за буква а в конце, без нее ничего не работае..в нете шарила, так и не нашла ответа..

Текст задания:
Найдите среднюю цену ПК и ПК-блокнотов, выпущенных производителем A (латинская буква).
Вывести: одна общая средняя цена.

Решение:

SELECT AVG(price)
FROM (
SELECT code, price, pc.model, ram, hd
FROM pc
WHERE model IN (
SELECT model
FROM product
WHERE maker='a'
)
UNION
SELECT code, price, laptop.model, ram, hd
FROM laptop
WHERE model IN (
SELECT model
FROM product
WHERE maker='a'
)
) a;
   
Ответить с цитированием
Старый
  (#2)  |  (на пост)
Сейчас вне форума
Аватар для Joyst
Сообщений: 13,111
Миксов: 500
Рейтинг мнений: 3905
Сказал(а) спасибо: 24,831
Поблагодарили: 27,980
Регистрация: 10.04.2010
Адрес: Криптонополис
Users Flag!
25.04.2012, 15:26

Сообщение от dar Посмотреть сообщение
Текст задания:
Найдите среднюю цену ПК и ПК-блокнотов, выпущенных производителем A (латинская буква).
Вывести: одна общая средняя цена.

Решение:

SELECT AVG(price)
FROM (
SELECT code, price, pc.model, ram, hd
FROM pc
WHERE model IN (
SELECT model
FROM product
WHERE maker='a'
)
UNION
SELECT code, price, laptop.model, ram, hd
FROM laptop
WHERE model IN (
SELECT model
FROM product
WHERE maker='a'
)
) a;
Так тоже будет работать:

Цитата
SELECT sum(s.price)/sum(s.kol) as sredn FROM
(SELECT price,1 as kol FROM pc,product
WHERE pc.model=product.model AND product.maker='A'
UNION all
SELECT price,1 as kol FROM laptop,product
WHERE laptop.model=product.model AND product.maker='A') as s
   
Ответить с цитированием
Старый
  (#3)  |  (на пост)
Сейчас вне форума
Аватар для Трактор
Сообщений: 9,266
Миксов: 1500
Рейтинг мнений: 4428
Сказал(а) спасибо: 13,309
Поблагодарили: 11,770
Регистрация: 10.01.2012
Адрес: Москва, Ейск
Users Flag!
25.04.2012, 15:28

Не претендую на звание знатока. Насколько я знаю sql последняя a это псевдоним таблицы. Перед ней можно написать as

SELECT AVG(price)
FROM (
SELECT code, price, pc.model, ram, hd
FROM pc
WHERE model IN (
SELECT model
FROM product
WHERE maker='a'
)
UNION
SELECT code, price, laptop.model, ram, hd
FROM laptop
WHERE model IN (
SELECT model
FROM product
WHERE maker='a'
)
) as a
   
Ответить с цитированием
Cказал(и) cпасибо:
Joyst (25.04.2012)
Старый
  (#4)  |  (на пост)
Сейчас вне форума
Аватар для dar
Сообщений: 3,046
Миксов: 500
Рейтинг мнений: 3554
Сказал(а) спасибо: 3,712
Поблагодарили: 4,082
Регистрация: 25.08.2011
Адрес: Киев
Users Flag!
25.04.2012, 15:29

Joyst, это я уже видела, у меня другой вопрос..
   
Ответить с цитированием
Старый
  (#5)  |  (на пост)
Сейчас вне форума
Аватар для dar
Сообщений: 3,046
Миксов: 500
Рейтинг мнений: 3554
Сказал(а) спасибо: 3,712
Поблагодарили: 4,082
Регистрация: 25.08.2011
Адрес: Киев
Users Flag!
25.04.2012, 15:30

Трактор, какое имя, откуда оно взялось это имя?? это имя нигде не объявлялось..любую букву поставить вместо а и оно тоже работает
   
Ответить с цитированием
Старый
  (#6)  |  (на пост)
Сейчас вне форума
Аватар для Трактор
Сообщений: 9,266
Миксов: 1500
Рейтинг мнений: 4428
Сказал(а) спасибо: 13,309
Поблагодарили: 11,770
Регистрация: 10.01.2012
Адрес: Москва, Ейск
Users Flag!
25.04.2012, 15:36

Сообщение от dar Посмотреть сообщение
какое имя, откуда оно взялось это имя?
Это псевдоним, который ты придумываешь сама. Ты можешь одну и туже таблицу задействовать в запросе несколько раз. При этом чтобы различать различные обращения к таблице ты даёшь им псевдонимы (в англоязычной документации alias).

SELECT model
FROM product as productA
inner join product as productB
on productA.producer = productB.trader
   
Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Joyst (25.04.2012), dar (25.04.2012)
Старый
  (#7)  |  (на пост)
Сейчас вне форума
Аватар для dar
Сообщений: 3,046
Миксов: 500
Рейтинг мнений: 3554
Сказал(а) спасибо: 3,712
Поблагодарили: 4,082
Регистрация: 25.08.2011
Адрес: Киев
Users Flag!
25.04.2012, 15:48

Трактор, спасибо, дошло уже..че блин не написать нормально в мануалах, что подзапрос нужно обзывать псевдонимом что б он был вычислительным столбцом..
но все равно работает неверно, почему..у меня один из обьединенных ничего не должен вывести
или в самой задаче подразумевается что обязательно есть и пк и лептоп..
   
Ответить с цитированием
Старый
  (#8)  |  (на пост)
Сейчас вне форума
Аватар для Трактор
Сообщений: 9,266
Миксов: 1500
Рейтинг мнений: 4428
Сказал(а) спасибо: 13,309
Поблагодарили: 11,770
Регистрация: 10.01.2012
Адрес: Москва, Ейск
Users Flag!
25.04.2012, 16:04

Если писать строго по SQL92 и выкинуть неиспользуемые поля, то запрос будет выглядеть так
Цитата
SELECT AVG(a.price)
FROM (
SELECT pc.price as price
FROM pc as pc
WHERE pc.model IN (
SELECT product.model
FROM product as product
WHERE product.maker='a'
)
UNION ALL
SELECT laptop.price
FROM laptop as laptop
WHERE laptop.model IN (
SELECT product.model
FROM product as product
WHERE product.maker='a'
)
) as a
По результату запроса ты не можешь судить о том откуда взята цена из первого или второго подзапроса. Только если исполнишь его отдельно
Цитата
SELECT code, price, laptop.model, ram, hd
FROM laptop
WHERE model IN (
SELECT model
FROM product
WHERE maker='a'
)
Вполне логично что второй запрос в объединении что-то возвращает. Почему бы в таблице laptop и не быть продуктам, производителя "a"?

И ещё. Обрати внимание на UNION ALL. Почитай чем отличается UNION от UNION ALL . Может быть в задании имеется в виду именно это различие?

Последний раз редактировалось Трактор; 25.04.2012 в 16:24.
   
Ответить с цитированием
Cказал(и) cпасибо:
dar (25.04.2012)
Старый
  (#9)  |  (на пост)
Сейчас вне форума
Аватар для dar
Сообщений: 3,046
Миксов: 500
Рейтинг мнений: 3554
Сказал(а) спасибо: 3,712
Поблагодарили: 4,082
Регистрация: 25.08.2011
Адрес: Киев
Users Flag!
25.04.2012, 16:38

Сообщение от Трактор Посмотреть сообщение
Только если исполнишь его отдельно
отдельно делаю
   
Ответить с цитированием
Старый
  (#10)  |  (на пост)
Сейчас вне форума
Аватар для dar
Сообщений: 3,046
Миксов: 500
Рейтинг мнений: 3554
Сказал(а) спасибо: 3,712
Поблагодарили: 4,082
Регистрация: 25.08.2011
Адрес: Киев
Users Flag!
25.04.2012, 16:44

Сообщение от Трактор Посмотреть сообщение
UNION ALL
SELECT laptop.price as price
FROM laptop as laptop
WHERE laptop.model IN (
SELECT product.model
FROM product as product
WHERE product.maker='a'
)
) as a
а as ненадо ?
   
Ответить с цитированием
Ответ

Метки
sql

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
vBulletin Skin developed by: vBStyles.com
PDA
Время генерации страницы 0.18194 секунды с 20 запросами