Здравствуйте!
Помогите написать запрос, пожалуйста!)))
Задание:
Найдите названия кораблей, имеющих наибольшее число орудий среди всех кораблей такого же водоизмещения (учесть корабли из справочника ДругиеСуда). Вывести: Наименование (корабля).

Описание схемы базы данных прикрепил)
Пол дня сижу, не получается написать, пока сложно,т.к начинающий программист((((
Спасибо!
---
можно разделить на 4 этапа
1. Запросом выбрать Водоизмещение, МАКСИМУМ(Орудий)
2. Добавляем Ссылка к запросу 1 Левым соединением
3. Выбрать все корабли Объединить со второй таблицей Другие суда (поля Ссылка, Водоизмещение, Орудий получаем левым соединением)
4. Левое соединение 2 и 3 по полю Ссылка
(в первом запросе у нас уже наложен фильтр на нужные корабли)
---
Как-то так:

```1c
    ВЫБРАТЬ
    ДругиеСуда.Наименование КАК Наименование,
    ДругиеСуда.КлассКорабля КАК КлассКорабля,
    КлассыКораблей.ЧислоОрудий КАК ЧислоОрудий,
    КлассыКораблей.Водоизмещение КАК Водоизмещение
    ПОМЕСТИТЬ ВТ
    ИЗ
    Справочник.ДругиеСуда КАК ДругиеСуда
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлассыКораблей КАК КлассыКораблей
    ПО ДругиеСуда.КлассКорабля = КлассыКораблей.Ссылка
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ.Наименование КАК Наименование,
    МАКСИМУМ(ВТ.ЧислоОрудий) КАК ЧислоОрудий,
    ВТ.Водоизмещение КАК Водоизмещение
    ИЗ
    ВТ КАК ВТ

    СГРУППИРОВАТЬ ПО
    ВТ.Наименование,
    ВТ.Водоизмещение
```
---
У него еще и справочник Корабли имеется, так что еще и Объединить.
---
Садись, два.
Ты выбрал ВСЕ корабли, и ВСЕМ кораблям присвоил максимальное число орудий от всех имеющихся.
Ну и про справочник "Корабли" забыл.
---
(7)Про справочник Корабли действительно забыл) - писал на скорую руку без конструктора)))
---
можно разделить на 4 этапа
1. Запросом выбрать Водоизмещение, МАКСИМУМ(Орудий)
2. Добавляем Ссылка к запросу 1 Левым соединением
3. Выбрать все корабли Объединить со второй таблицей Другие суда (поля Ссылка, Водоизмещение, Орудий получаем левым соединением)
4. Левое соединение 2 и 3 по полю Ссылка
(в первом запросе у нас уже наложен фильтр на нужные корабли)
---
а задание куда (для чего)? если не секрет.
---
https://forum.infostart.ru/forum9/topic285442/

Для группы задали задания что ли?)))
---
Для двоечников. Последний шанс остаться на учебе.
---
Вы бы уже выгрузку базы отправили, чтобы запросы руками не писать.
---
Зачем. База создается за 15 минут. Кто хотел...быстро набросал ее в пустом конфигураторе
---
Попробуйте так:

```1c
    ВЫБРАТЬ
    МАКСИМУМ(Классы.ЧислоОрудий) КАК ЧислоОрудий,
    Классы.Водоизмещение
    ПОМЕСТИТЬ ВТКлассыЦифры
    ИЗ
    Справочник.КлассыКораблей КАК Классы

    СГРУППИРОВАТЬ ПО
    Классы.Водоизмещение
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Классы.Ссылка
    ПОМЕСТИТЬ ВТКлассы
    ИЗ
    ВТКлассыЦифры КАК ВТКлассыЦифры
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Классы КАК Классы
    ПО ВТКлассыЦифры.Водоизмещение = Классы.Водоизмещение
    И ВТКлассыЦифры.ЧислоОрудий = Классы.ЧислоОрудий
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Корабли.Ссылка
    ИЗ
    Справочник.Корабли КАК Корабли
    ГДЕ
    Корабли.Класс В
    (ВЫБРАТЬ
    ВТКлассы.Ссылка
    ИЗ
    ВТКлассы)

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДругиеСуда.Ссылка
    ИЗ
    Справочник.ДругиеСуда КАК ДругиеСуда
    ГДЕ
    ДругиеСуда.Класс В
    (ВЫБРАТЬ
    ВТКлассы.Ссылка
    ИЗ
    ВТКлассы)
    ;
```
---
(8)Несовпадение типа значений полей результирующего и эталонного наборов данных!
Такая ошибка выходит. Не совсем понимаю,в чем дело.
Псевдоним указал здесь
ВЫБРАТЬ
Корабли.Ссылка КАК Наименование
---
попробуйте переименовать дублирующиеся наименования полей в запросе.
---
Выкладывайте уже весь свой запрос, чтобы мы не гадали...
---
В задаче не описано, что делать если несколько кораблей одинакового водоизмещения и одинакового количества орудий... в запросе выводятся все.
В задании не сказано как реагировать если несколько классов кораблей с одинаковыми параметрами водоизмещения и количество орудий... я в запросе исходил из того, что имеет значение только водоизмещение, а классы не имеют значение... соответственно для каждого водоизмещения выводится лидеры по орудиям из любого класса.

В задании также не указано...учитывать ли потопленные корабли... в запросе это не анализируется.

И считаем что наименования кораблей все разные...так как не описано что делать с "тёсками"
---
Вы имеете в виду классы с одинаковым количеством орудий и водоизмещения? Да выведутся все, вроде условию не противоречит. По поводу потопленных уж пусть автор сам изволит дописать условие в последнем запросе.
---
Извиняюсь, условием там не обойдешься.
---
Не учитывая потопленные или поврежденные

```1c
    ВЫБРАТЬ
    Корабли.Наименование КАК Наименование,
    Корабли.КлассКорабля.Водоизмещение КАК КлассКорабляВодоизмещение,
    Корабли.КлассКорабля.ЧислоОрудий КАК КлассКорабляЧислоОрудий,
    Корабли.Ссылка КАК Ссылка
    ПОМЕСТИТЬ ВТ_ВсеКорабли
    ИЗ
    Справочник.Корабли КАК Корабли

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДругиеСуда.Наименование,
    ДругиеСуда.КлассКорабля.Водоизмещение,
    ДругиеСуда.КлассКорабля.ЧислоОрудий,
    ДругиеСуда.Ссылка
    ИЗ
    Справочник.ДругиеСуда КАК ДругиеСуда
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_ВсеКорабли.Наименование КАК Наименование,
    ИсходСражения.РезультатУчастия КАК РезультатУчастия,
    ВТ_ВсеКорабли.КлассКорабляВодоизмещение КАК КлассКорабляВодоизмещение,
    ВТ_ВсеКорабли.КлассКорабляЧислоОрудий КАК КлассКорабляЧислоОрудий
    ПОМЕСТИТЬ ВТ_КораблиВСтрою
    ИЗ
    ВТ_ВсеКорабли КАК ВТ_ВсеКорабли
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсходСражения КАК ИсходСражения
    ПО ВТ_ВсеКорабли.Ссылка = ИсходСражения.Корабль
    ГДЕ
    (ИсходСражения.РезультатУчастия ЕСТЬ NULL
    ИЛИ ИсходСражения.РезультатУчастия = ЗНАЧЕНИЕ(Перечисление.РезультатУчастия.Невредим))
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ РАЗЛИЧНЫЕ
    КлассыКораблей.Водоизмещение КАК Водоизмещение,
    МАКСИМУМ(КлассыКораблей.ЧислоОрудий) КАК ЧислоОрудий
    ПОМЕСТИТЬ ВТ_МаксимумПоВодоизмещению
    ИЗ
    Справочник.КлассыКораблей КАК КлассыКораблей

    СГРУППИРОВАТЬ ПО
    КлассыКораблей.Водоизмещение
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_КораблиВСтрою.Наименование КАК Наименование
    ИЗ
    ВТ_КораблиВСтрою КАК ВТ_КораблиВСтрою
    Внутреннее СОЕДИНЕНИЕ ВТ_МаксимумПоВодоизмещению КАК ВТ_МаксимумПоВодоизмещению
    ПО (ВТ_КораблиВСтрою.КлассКорабляВодоизмещение = ВТ_МаксимумПоВодоизмещению.Водоизмещение
    И ВТ_КораблиВСтрою.КлассКорабляЧислоОрудий = ВТ_МаксимумПоВодоизмещению.ЧислоОрудий)
```
---
```1c
    ГДЕ
    (ИсходСражения.РезультатУчастия ЕСТЬ NULL
    ИЛИ ИсходСражения.РезультатУчастия = ЗНАЧЕНИЕ(Перечисление.РезультатУчастия.Невредим))
```

Не учтена дата сражения...один корабль мог участвовать в нескольких сражениях и быть поврежден ранее и востановлен к следующему или наоборот в первом сражении победить, а в последующем потоплен быть.

А у вас отбор: либо совсем не сражался, либо в любом из сражений был невредимым.
Так точно нельзя.
Нужно сначала выбрать таблицу с максимальными датами сражения для каждого корабля, а потом присоединить левым соединением результаты боев к таблице кораблей с учетом полученных максимальных дат боев (при null указывать что невредим)
Теперь можно отобрать невредимые корабли
---
Хорошее замечание) не додумался)
---
Кстати, можно сильно упростить и избавится от временной таблицы ВТ_ВсеКорабли совсем и сразу выбирать из справочников кораблей названия с нужной комбинацией водоизмещение+количетсво_орудий
---
это же схема с sql-ex.ru ))
надо просто найти такую же задачку и к ней решение и переиначить.