Форум программистов, компьютерный форум, киберфорум
Наши страницы
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/26: Рейтинг темы: голосов - 26, средняя оценка - 4.54
jacek
20 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 45
1

Запрос SQL: агрегатная функция по таблице из подзапроса

06.01.2012, 01:46. Просмотров 4765. Ответов 11
Метки нет (Все метки)

Подскажите пожалуйста, как написать запрос. Например, имеем две таблицы Printer и PC. Надо найти среди двух таблиц модель с максимальной ценой (model, price).

Собственно, понимаю задачу так: составить таблицу максимумов по каждой таблице. Затем из полученной таблицы выбрать максимум.
SQL
1
2
3
4
5
6
7
8
9
10
SELECT mdl, prc
FROM (SELECT model mdl, price prc
      FROM PC
      WHERE price = (SELECT MAX(price) FROM PC)
      UNION
      SELECT model, price
      FROM Printer
      WHERE price = (SELECT MAX(price) FROM Printer)
      ) t
WHERE prc = (SELECT MAX(t.prc) FROM t)
Вот только не работает такой запрос. Если вместо "SELECT MAX(t.prc)..." подставить явно число, то запрос работает.
Как иначе решить задачу? Прошу объяснения, поскольку, именно в этом типе задач, а не в конкретно изложенной выше, возникла загвоздка... А препода увижу через неделю только. Заранее спасибо
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2012, 01:46
Ответы с готовыми решениями:

Агрегатная функция MAX() для подзапроса
Доброго времени суток! Вроде простая задача, но прошу вашей помощи, т.к. ответ...

Агрегатная функция от агрегатной функции
Доброго времени суток! Помогите, пожалуйста, разобраться со следующим...

Что такое совокупная (агрегатная) функция?
Здраствуйте. Может кто нибуть подсказать что такое совокупная функция...

Запрос без подзапроса
Помогите пожалуйста избавиться от подзапроса: SELECT Nz, FROM HousPodsParams...

Запрос: приравнять значение в одной таблице значению в другой таблице
как можно осуществить запрос : приравнять значение одной таблицы значению в...

11
iap
898 / 623 / 130
Регистрация: 27.11.2009
Сообщений: 1,863
06.01.2012, 12:15 2
SQL
1
2
3
4
5
6
7
SELECT TOP(1) WITH TIES mdl, prc FROM
(
 SELECT model, price FROM PC
 UNION ALL
 SELECT model, price FROM Printer
) t(mdl,prc)
ORDER BY prc DESC;
Только непонятно, почему не сделать одну таблицу и для принтеров,
и для компьютеров, и для всего, чего угодно,
если они в будущем потребуются?
0
jacek
20 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 45
06.01.2012, 14:26  [ТС] 3
Да, логично объединить сначала все таблицы, а потом уже максимум искать. Но! Я неспроста писал код и описание хода моих мыслей. Например, задачу усложним: надо найти по каждой таблице среднее, а потом - максимум этих средних значений по всем таблицам.

Мне интересно, вообще можно как-то написать код, соответствующий ходу моих мыслей
Смысл, что в условии WHERE используется еще один подзапрос, который использует полученную с помощью подзапроса в секции FROM таблицу 't'. Как впихнуть в позапрос в WHERE таблицу из FROM? Вообще, это реально сделать?
0
pincet
1337 / 923 / 126
Регистрация: 23.07.2010
Сообщений: 5,039
06.01.2012, 14:31 4
sql-ex?
0
Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
06.01.2012, 14:32 5
iap,
Только непонятно, почему не сделать одну таблицу и для принтеров,
и для компьютеров, и для всего, чего угодно,
если они в будущем потребуются?
=) В будущем они точно не потребуются, потому как человек решает тесты на sql-ex.ru
0
pincet
1337 / 923 / 126
Регистрация: 23.07.2010
Сообщений: 5,039
06.01.2012, 14:34 6
Цитата Сообщение от Kdn Посмотреть сообщение
iap,

=) В будущем они точно не потребуются, потому как человек решает тесты на sql-ex.ru
Зачетный сайтец, кстати
0
Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
06.01.2012, 14:35 7
pincet, Это да, по началу карьеры тоже там тренился =)
0
jacek
20 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 45
06.01.2012, 16:12  [ТС] 8
Сайт-то зачетный, но по нерешенным задачам на форум не пускают)
Сам стою на пророге начала карьеры, и нужен, помимо прочего, SQL.

Так что, решаются ли подобные задачи по моей логике? И как, если решаются?
0
pincet
1337 / 923 / 126
Регистрация: 23.07.2010
Сообщений: 5,039
06.01.2012, 17:57 9
Максиму максимумов из двух талбиц
SQL
1
2
3
4
SELECT MAX(p) FROM
(SELECT MAX(price) p FROM PC
UNION ALL
SELECT MAX(price) p FROM Printer) se
Добавлено через 1 час 15 минут
sql-ex#24
Перечислите номера моделей любых типов, имеющих самую высокую цену по всей имеющейся в базе данных продукции.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT model FROM
(SELECT model, price FROM pc
 UNION
 SELECT model, price FROM laptop
 UNION 
 SELECT model, price FROM printer
)se
WHERE se.price= 
(SELECT MAX(price) FROM (
    SELECT price FROM pc
    UNION
    SELECT price FROM laptop
    UNION
    SELECT price FROM printer) sa )
1
jacek
20 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 45
06.01.2012, 21:01  [ТС] 10
Спасибо за код...
Получается, я неправильно мыслю. Нельзя сперва полностью собрать таблицу в подзаппросе секции FROM, а потом по ней уже искать нужные данные с помощью агрегатных в секции WHERE. Ладно, буду еще думать. Спасибо.
0
pincet
1337 / 923 / 126
Регистрация: 23.07.2010
Сообщений: 5,039
06.01.2012, 21:06 11
Попробуй сделать ВСЕ упражнения с sql-ex. По возможности сам. И будет тебе счастие
0
jacek
20 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 45
06.01.2012, 21:16  [ТС] 12
То есть, нельзя составить в секции FROM таблицу, а потом использовать её в секции WHERE по ссылке (типа, как я пытался сделать)?
Нужно составлять две промежуточные таблицы:
1. SA(model, price) в секции FROM
2. SE(price) в секции WHERE

Я правильно всё понял?

По поводу "всех упражнений": пытаюсь. Только вот не понял именно описанный выше момент, из-за чего не могу продолжать
0
06.01.2012, 21:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2012, 21:16

Агрегатная функция
Нужно написать запрос "Определить кол-во самых старых пациентов" SELECT...

SQL запрос по фрагменту строки сохраненной в таблице SQL
Прошу помощи. Есть SQL таблица-1, в ней есть столбец по имени Model_Vagona с...

SQL-запрос по таблице
Всем привет!) Заранее спасибо, что даже открыли эту тему) в общем у меня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru