Запросы с агрегатными функциями

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
ya_novichok
Сообщения: 2
Зарегистрирован: 30 ноя 2009, 18:34

30 ноя 2009, 19:10

Привет всем!
У меня есть таблицы:
МодельУстройства(id_модели, наименование, фирма)
Устройства(СерийныйНомер,id_модели,...)
РемонтУстройств(id_ремонта,id_причины,СерийныйНомер,...)
ПричиныРемонта(id_причины,наименование)

нужно написать запрос, который возвращает фирму, устройства которой чаще попадают в ремонт.

и запрос, возвращающий причину, по которой чаще всего устройства попадают в ремонт.

как это осуществить? совсем запуталась.помогите,пожалуйста.
заранее спасибо.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
вот до чего дошла сама, а что дальше?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
mc-black
Сообщения: 245
Зарегистрирован: 08 май 2008, 16:09
Откуда: Россия, Нижний Новгород
Контактная информация:

30 ноя 2009, 23:24

возвращает фирму, устройства которой чаще попадают в ремонт

Код: Выделить всё

SELECT TOP 1 ЧислоРемонтов.фирма
FROM [SELECT COUNT(*) As число, Фирмы.фирма
FROM РемонтУстройств, [SELECT Устройства.СерийныйНомер, МодельУстройства.фирма
FROM МодельУстройства, Устройства
WHERE МодельУстройства.id_модели=Устройства.id_модели]. AS Фирмы
WHERE РемонтУстройств.СерийныйНомер=Фирмы.СерийныйНомер
GROUP BY Фирмы.фирма]. AS ЧислоРемонтов
ORDER BY ЧислоРемонтов.число DESC;
На заказ: VBA, Excel mc-black@yandex.ru
Yurich
Сообщения: 104
Зарегистрирован: 23 фев 2004, 19:07

30 ноя 2009, 23:26

ya_novichok писал(а):Привет всем!
У меня есть таблицы:
МодельУстройства(id_модели, наименование, фирма)
Устройства(СерийныйНомер,id_модели,...)
РемонтУстройств(id_ремонта,id_причины,СерийныйНомер,...)
ПричиныРемонта(id_причины,наименование)

нужно написать запрос, который возвращает фирму, устройства которой чаще попадают в ремонт.

и запрос, возвращающий причину, по которой чаще всего устройства попадают в ремонт.

как это осуществить? совсем запуталась.помогите,пожалуйста.
заранее спасибо.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
вот до чего дошла сама, а что дальше?
Ты практически все сама сделала. Осталось только добавить "order by КолРемонтов desc limit 1"
Аватара пользователя
mc-black
Сообщения: 245
Зарегистрирован: 08 май 2008, 16:09
Откуда: Россия, Нижний Новгород
Контактная информация:

30 ноя 2009, 23:35

запрос, возвращающий причину, по которой чаще всего устройства попадают в ремонт

Код: Выделить всё

SELECT TOP 1 ПричиныРемонта.наименование
FROM ПричиныРемонта, РемонтУстройств
WHERE ПричиныРемонта.id_причины=РемонтУстройств.id_причины
GROUP BY ПричиныРемонта.наименование
ORDER BY COUNT(*) DESC;
На заказ: VBA, Excel mc-black@yandex.ru
Аватара пользователя
Игорь Акопян
Сообщения: 1419
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

01 дек 2009, 11:22

только по структуре напрашивается не

Устройства(СерийныйНомер,id_модели,...) и
РемонтУстройств(id_ремонта,id_причины,СерийныйНомер,...)

а
Устройства(id_Устройства, СерийныйНомер,id_модели,...) и
РемонтУстройств(id_ремонта,id_причины,id_Устройства,...)

ибо серийник строка скорее всего, а ключи по строкам - не айс
Изображение
ya_novichok
Сообщения: 2
Зарегистрирован: 30 ноя 2009, 18:34

01 дек 2009, 17:00

Игорь Акопян писал(а):только по структуре напрашивается не

Устройства(СерийныйНомер,id_модели,...) и
РемонтУстройств(id_ремонта,id_причины,СерийныйНомер,...)

а
Устройства(id_Устройства, СерийныйНомер,id_модели,...) и
РемонтУстройств(id_ремонта,id_причины,id_Устройства,...)

ибо серийник строка скорее всего, а ключи по строкам - не айс
серийник тоже число. первоначально был id_устройства, но преподу показалось, что идентифицируищих полей хватает и без id... приходиться подчиняться ибо это курсач)
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Спасибо всем, что откликнулись)
я вчера сама довела эти запросы до ума, но наверно не рационально: я создала представление, и уже из этой виртуальной таблицы выбирала максимум.
как на Ваш взгляд такой ход?
Аватара пользователя
Игорь Акопян
Сообщения: 1419
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

02 дек 2009, 13:52

вполне нормальный. Скорость устраивает? Функцию на него возложенную выполняет? Ну и славно.

ЗЫ. Серийник - число? Оригинально... У меня вот вокруг ни один прибор к вам не внести будет... Ну да дело хозяйское :)
Изображение
chur
Сообщения: 195
Зарегистрирован: 17 фев 2004, 10:44
Откуда: Riga, Latvia

02 дек 2009, 15:35

ЗЫ. Хотелось бы, чтоб модератор поправил название топика
Запросы с агрегатными функциями (а не агрегированными)
Ответить