Форум программистов, компьютерный форум, киберфорум
Наши страницы

Microsoft SQL Server

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.91
jacek
20 / 3 / 1
Регистрация: 12.05.2011
Сообщений: 45
#1

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

06.01.2012, 01:46. Просмотров 4563. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Запрос SQL: агрегатная функция по таблице из подзапроса (SQL Server):

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

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

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

Запрос без подзапроса - SQL Server
Помогите пожалуйста избавиться от подзапроса: SELECT Nz, FROM HousPodsParams WHERE ( NOT IN (SELECT ParamsId FROM HousPodsKeysParams...

Запрос: приравнять значение в одной таблице значению в другой таблице - SQL Server
как можно осуществить запрос : приравнять значение одной таблицы значению в другой таблицы idn | name idf | fname

Агрегатная функция - MS Access
Нужно написать запрос "Определить кол-во самых старых пациентов" SELECT Count(Год_рождения) AS количество FROM Картотека WHERE...

11
iap
801 / 611 / 123
Регистрация: 27.11.2009
Сообщений: 1,814
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 / 1
Регистрация: 12.05.2011
Сообщений: 45
06.01.2012, 14:26  [ТС] #3
Да, логично объединить сначала все таблицы, а потом уже максимум искать. Но! Я неспроста писал код и описание хода моих мыслей. Например, задачу усложним: надо найти по каждой таблице среднее, а потом - максимум этих средних значений по всем таблицам.

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

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

Так что, решаются ли подобные задачи по моей логике? И как, если решаются?
0
pincet
1297 / 884 / 106
Регистрация: 23.07.2010
Сообщений: 4,776
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 / 1
Регистрация: 12.05.2011
Сообщений: 45
06.01.2012, 21:01  [ТС] #10
Спасибо за код...
Получается, я неправильно мыслю. Нельзя сперва полностью собрать таблицу в подзаппросе секции FROM, а потом по ней уже искать нужные данные с помощью агрегатных в секции WHERE. Ладно, буду еще думать. Спасибо.
0
pincet
1297 / 884 / 106
Регистрация: 23.07.2010
Сообщений: 4,776
06.01.2012, 21:06 #11
Попробуй сделать ВСЕ упражнения с sql-ex. По возможности сам. И будет тебе счастие
0
jacek
20 / 3 / 1
Регистрация: 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
Привет! Вот еще темы с ответами:

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

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

SQL запрос IN в текстовой таблице - Delphi БД
Помогите решить проблему с SQL запросом, tp текстовая таблица ,выдает ошибку. Прошу помощи как правильно написать код begin ...

Не отображаются данные в таблице (запрос sql) - C#
Запрос делал через sqlCommand1, sqlConnection1. Через конструктор запросов добавил CommandText для sqlCommand1. В конструкторе запросов...


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

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

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