Перейти к содержимому

Сервис обмена электронных валют


Вложеный запрос

#1 Снежа

Снежа
  • Пользователь
  • 15 сообщений
  • Репутация: 0
0

Отправлено 22 Июль 2009 - 23:58

Мне нужно : Выбрать издательство, самую дорогую книгу издательства и ее автора
для издательства с самой низкой стоимостью страницы, из издательств:
Питер
Диалог-МИФИ
DiaSoft


кусок кода который я написала: под запрос
(Select izd,'=',sum(price*pages) as 'ДОХОД'From booksgroup by izdhaving izd in ('Питер','Диалог-МИФИ','DiaSoft'));

осталось написать сам запрос, главную часть

http://slil.ru/27854161 - бд на которой нужно это воспроизвести

Жду умных ответов :)

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 23 Июль 2009 - 10:28

Не проверял, но должно работать.
SELECT Izd, Name, Price*Pages AS ['pole']
FROM books WHERE Izd = (SELECT TOP 1 Izd FROM books WHERE Izd IN('Питер','Диалог-МИФИ','DiaSoft') ORDER BY Price)
ORDER BY 3 DESC;


Только не пойму

для издательства с самой низкой стоимостью страницы

Где там у издательств цена страницы прописана?
  • 0

#3 Снежа

Снежа
    Topic Starter
  • Пользователь
  • 15 сообщений
  • Репутация: 0

Отправлено 23 Июль 2009 - 14:21

price/pages это цена страницы
  • 0

#4 FordogeN

FordogeN
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0

Отправлено 25 Июль 2009 - 12:34

Не проверял, но должно работать.

SELECT Izd, Name, Price*Pages AS ['pole']
FROM books WHERE Izd = (SELECT TOP 1 Izd FROM books WHERE Izd IN('Питер','Диалог-МИФИ','DiaSoft') ORDER BY Price)
ORDER BY 3 DESC;


Только не пойму

Где там у издательств цена страницы прописана?

чтоб получить цену страницы нужно Price/Pages т.е. Цену книги поделить на количество страниц.
  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата



#5 Снежа

Снежа
    Topic Starter
  • Пользователь
  • 15 сообщений
  • Репутация: 0

Отправлено 25 Июль 2009 - 22:36

Вот код:

select  pp as [Min price], izd
from ( SELECT avg(price/pages) as pp, izd
from books where pages>0
group by izd
)


where pp=(
select min(pp)
from ( SELECT avg(price/pages) as pp
from books where pages>0
group by izd

having izd in ('Питер','Диалог-МИФИ','DiaSoft')
)
)
;


Он работает, осталось вывести еще название книги. Но почему-то, так он не хочет
select  pp as [Min price], izd, name


в чем ошибка?
  • 0

#6 FordogeN

FordogeN
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0

Отправлено 25 Июль 2009 - 22:43

Я думаю нужно так:
select name, izd, pp as [Min price]

  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата



#7 Снежа

Снежа
    Topic Starter
  • Пользователь
  • 15 сообщений
  • Репутация: 0

Отправлено 25 Июль 2009 - 22:46

не получается, он просто не распознает ничего кроме

select izd, pp as [Min price]

в этой строчке, на все остальное он говорит "не знаю такого" и предлагает указать значение поля name
  • 0

#8 FordogeN

FordogeN
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0

Отправлено 25 Июль 2009 - 22:50

не получается, он просто не распознает ничего кроме

select izd, pp as [Min price]

в этой строчке, на все остальное он говорит "не знаю такого" и предлагает указать значение поля name

тогда забей и Валерыча завтра пригрузи))
  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата



#9 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 31 Июль 2009 - 00:18

Снежа, чем вам мой вариант не нравится, он рабочий, я проверял на вашей базе, вот только я не правильно низшую цену рассчитывал.
А не работает, потому что
select pp as [Min price], izd
from ( SELECT avg(price/pages) as pp, izd
from books where pages>0
group by izd
)
Вы как бы пытаетесь из общей базы выбрать записи со страницами больше 0 и сгруппировать по издательству(но вы в эту временную таблицу помещаете только 2 поля), как же вы потом из этой таблицы выберите имя книжки? Да никак! Ваш случай не прокатит, у вас просто выведется название не самой дешовой книги, а самое первое сгруппированное. хотя может я и ошибаюсь. Вообще попробуйте:
select pp as [Min price], izd, name
from ( SELECT avg(price/pages) as pp, izd, name
from books where pages>0
group by izd
)


where pp=(
select min(pp)
from ( SELECT avg(price/pages) as pp
from books where pages>0
group by izd

having izd in ('Питер','Диалог-МИФИ','DiaSoft')
)
)
;

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru