Мини-чат

Запрещается мат, реклама в любом её виде, оскорбления. За любое нарушение будет бан или наказание как в чате, так и на форуме.
Загрузка...
Очистить поле ввода
Запрещается мат, флуд, реклама в любом её виде, оскорбления. За любое нарушение будет бан как в чате, так и на форуме.
Основная справка
Чат MGC Chatbox Evo очень легок в использовании
Вы можете:
  1. Отправлять сообщения: введите текст в поле ввода и нажмите Enter, или кнопку OK в чате.
  2. Форматировать сообщения: открыв панель форматирования нажатием кнопки BBCode, вы получаете доступ к различным настройкам форматирования текста ваших сообщений.*
  3. Общаться в разных комнатах: в зависимости от настроек группы пользователей, в которой вы состоите, либо настроек чата вы можете оставлять сообщения в разных комнатах. Выбор комнаты осуществляется нажатием соответствующей кнопки в левой части чата.*
  4. Редактировать свои сообщения (или сообщения других): редактирование осуществляется двойным нажатием на сообщение.*
  5. Использовать команды: команды позволяют пользоваться новыми опциями форматирования, управления и т.д... Информация о доступных вам командах будет расположена ниже. Вы можете не вводить префикс команды (/название_команды) в связанной с ней комнате (исключение составляет основная комната).*
* в зависимости от настроек выбранных администрацией форума для вашей группы.
Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 20 из 44

Тема: Гуру SQL АУ-У-У!!! Сдаюсь((((

  1. #1
    Заблокирован
    Регистрация
    25.06.2009
    Адрес
    Архангельск 2 л\з
    Сообщений
    943
    Получено (+/-): 0/0

    По умолчанию Гуру SQL АУ-У-У!!! Сдаюсь((((

    SQL-EX, задача 56, сложность 3, мое предполагаемое решение:
    select class,sum(Sunks) as Sunks
    from
    (select Classes.class as class,
    (select count(Outcomes.ship) from Outcomes where (
    (Outcomes.ship=Classes.class and Ships.name IS NULL)
    or
    (Outcomes.ship=Ships.name and Ships.name IS NOT NULL)
    ) and Outcomes.result='sunk') as Sunks
    from Classes left outer join Ships on Classes.class=Ships.class) as zapros
    group by class
    Основная база тетст пройден, на второй 2-насовпадения
    Кто нить скажите, где я тут дибил? Только не надо решения, просто тыкнете носом где не прав. Если ни кто не подскажет, то мой мозг разорвет и будет очень грязно.

    0 Not allowed! Not allowed!

  2. # ADS
    ООО "Рекламная реклама"
    Регистрация
    Always
    Адрес
    Advertising world
    Сообщений
    Many
     

  3. #2

    По умолчанию

    ничего не ясно ..что за тест что за хрень о чем ты вообще
    ты похоже думаешь что тут телепаты ) не дал ни таблицы откуда выборка ничего вообще я бы на твоем месте попробовал Outcomes.result like 'sunk'
    хз есть ли в sql-ex но для обычного подходит

    0 Not allowed! Not allowed!

  4. #3
    Местный Аватар для ronin
    Регистрация
    09.08.2009
    Адрес
    Северодвинск
    Сообщений
    217
    Получено (+/-): 0/0

    По умолчанию

    SQL-EX это сайт только я не понял как там найти 56 задачу, а так действительно ничего не понятно

    0 Not allowed! Not allowed!

  5. #4
    Пользователь Аватар для nvv13
    Регистрация
    14.07.2009
    Адрес
    Архангельск
    Сообщений
    82
    Получено (+/-): 0/0

    По умолчанию

    может так
    SELECT class, count(*) as bul_bul
    from
    (
    select class=
    isnull( (select class from Ships where Ships.name=Outcomes.ship),
    (select class from Classes where Ships.class=Outcomes.ship)
    )
    from Outcomes where result = 'sunk'
    ) as uvi
    GROUP BY class

    0 Not allowed! Not allowed!

  6. #5
    Заблокирован
    Регистрация
    25.06.2009
    Адрес
    Архангельск 2 л\з
    Сообщений
    943
    Получено (+/-): 0/0

    По умолчанию

    Цитата Сообщение от nvv13 Посмотреть сообщение
    может так
    SELECT class, count(*) as bul_bul
    from
    (
    select class=
    isnull( (select class from Ships where Ships.name=Outcomes.ship),
    (select class from Classes where Ships.class=Outcomes.ship)
    )
    from Outcomes where result = 'sunk'
    ) as uvi
    GROUP BY class
    Данный подзапрос неверен. В нет ни в джоинах таблицы Ships, ни в основном запросе.

    Цитата Сообщение от mazx Посмотреть сообщение
    ничего не ясно ..что за тест что за хрень о чем ты вообще
    ты похоже думаешь что тут телепаты ) не дал ни таблицы откуда выборка ничего вообще я бы на твоем месте попробовал Outcomes.result like 'sunk'
    хз есть ли в sql-ex но для обычного подходит
    нет, не то, смысл сложности задачи не в этом


    Цитата Сообщение от ronin Посмотреть сообщение
    SQL-EX это сайт только я не понял как там найти 56 задачу, а так действительно ничего не понятно
    нужно перейти в раздел обучающего этапа и там есть выбор задачи.

    0 Not allowed! Not allowed!
    Последний раз редактировалось KLIM; 31.08.2009 в 09:30.

  7. #6
    Пользователь Аватар для nvv13
    Регистрация
    14.07.2009
    Адрес
    Архангельск
    Сообщений
    82
    Получено (+/-): 0/0

    По умолчанию

    Цитата Сообщение от KLIM Посмотреть сообщение
    Цитата:Сообщение от nvv13
    может так
    SELECT class, count(*) as bul_bul
    from
    (
    select class=
    isnull( (select class from Ships where Ships.name=Outcomes.ship),
    (select class from Classes where Ships.class=Outcomes.ship)
    )
    from Outcomes where result = 'sunk'
    ) as uvi
    GROUP BY class

    Данный подзапрос неверен. В нет ни в джоинах таблицы Ships, ни в основном запросе.
    а зачем join? это обязательное условие в задании, наличия join?
    а что выдает тест выполнения запроса?
    проверь пожалуйста на базе, а то у меня к ней доступа нет, Я не зарегестрирован на SQL-EX, очень хочется знать в чем Я не прав

    0 Not allowed! Not allowed!
    Последний раз редактировалось nvv13; 31.08.2009 в 09:48.

  8. #7
    Заблокирован
    Регистрация
    25.06.2009
    Адрес
    Архангельск 2 л\з
    Сообщений
    943
    Получено (+/-): 0/0

    По умолчанию

    Цитата Сообщение от nvv13 Посмотреть сообщение
    а зачем join? это обязательное условие в задании, наличия join?
    а что выдает тест выполнения запроса?
    Нет, но в твоем запросе нет этой таблицы вообще, он просто не видит это поле. Вот это выдает при тесте твоего запроса: The multi-part identifier "Ships.class" could not be bound
    Вот база:
    Краткая информация о базе данных "Корабли":

    Рассматривается БД кораблей, участвовавших во второй мировой войне. Имеются следующие отношения:
    Classes (class, type, country, numGuns, bore, displacement)
    Ships (name, class, launched)
    Battles (name, date)
    Outcomes (ship, battle, result)
    Корабли в «классах» построены по одному и тому же проекту, и классу присваивается либо имя первого корабля, построенного по данному проекту, либо названию класса дается имя проекта, которое не совпадает ни с одним из кораблей. Корабль, давший название классу, называется головным.
    Отношение Classes содержит имя класса, тип (bb для боевого (линейного) корабля или bc для боевого крейсера), страну, в которой построен корабль, число главных орудий, калибр орудий (диаметр ствола орудия в дюймах) и водоизмещение ( вес в тоннах). В отношении Ships записаны название корабля, имя его класса и год спуска на воду. В отношение Battles включены название и дата битвы, в которой участвовали корабли, а в отношении Outcomes – результат участия данного корабля в битве (потоплен-sunk, поврежден - damaged или невредим - OK). Замечание. В отношение Outcomes могут входить корабли, отсутствующие в отношении Ships.
    Задача:
    Для каждого класса определите число кораблей этого класса, потопленных в сражении. Вывести: класс и число потопленных кораблей.

    0 Not allowed! Not allowed!

  9. #8
    Пользователь Аватар для nvv13
    Регистрация
    14.07.2009
    Адрес
    Архангельск
    Сообщений
    82
    Получено (+/-): 0/0

    По умолчанию

    понял, опечатка!
    SELECT class, count(*) as bul_bul
    from
    (
    select class=
    isnull( (select class from Ships where Ships.name=Outcomes.ship),
    (select class from Classes where Classes.class=Outcomes.ship)
    )
    from Outcomes where result = 'sunk'
    ) as uvi
    GROUP BY class

    проверь

    0 Not allowed! Not allowed!

  10. #9
    Заблокирован
    Регистрация
    25.06.2009
    Адрес
    Архангельск 2 л\з
    Сообщений
    943
    Получено (+/-): 0/0

    По умолчанию

    Результаты выполнения
    Вашего запроса:
    class bul_bul
    NULL 4
    Bismarck 1
    Kongo 1
    правильного запроса:
    class Sunks
    Bismarck 1
    Iowa 0
    Kongo 1
    North Carolina 0
    Renown 0
    Revenge 0
    Tennessee 0
    Yamato 0

    0 Not allowed! Not allowed!

  11. #10
    Пользователь Аватар для nvv13
    Регистрация
    14.07.2009
    Адрес
    Архангельск
    Сообщений
    82
    Получено (+/-): 0/0

    По умолчанию

    а такое
    SELECT class, sum(cl) as bul_bul
    from
    (
    select class,cl
    from (
    select class=isnull( (select class from Ships where Ships.name=Outcomes.ship) ,
    (select class from Classes where Classes.class=Outcomes.ship) )
    ,cl=1
    from Outcomes where result = 'sunk'
    ) as d1 where class is not null
    union all
    select class,cl=0 from Classes
    ) as uvi
    GROUP BY class

    0 Not allowed! Not allowed!

  12. #11
    Заблокирован
    Регистрация
    25.06.2009
    Адрес
    Архангельск 2 л\з
    Сообщений
    943
    Получено (+/-): 0/0

    По умолчанию

    Теперь верно. А почему мой не совсем корректно работает, я чего то ни как не врубаюсь? Я в роде тоже совпадения нулами разделил, но почему??

    0 Not allowed! Not allowed!
    Последний раз редактировалось KLIM; 31.08.2009 в 10:11.

  13. #12
    Пользователь Аватар для nvv13
    Регистрация
    14.07.2009
    Адрес
    Архангельск
    Сообщений
    82
    Получено (+/-): 0/0

    По умолчанию

    Цитата Сообщение от KLIM Посмотреть сообщение
    Теперь верно. А почему мой не совсем корректно работает, я чего то ни как не врубаюсь? Я в роде тоже совпадения нулами разделил, но почему??
    а какой результат выдает

    0 Not allowed! Not allowed!

  14. #13
    Пользователь Аватар для nvv13
    Регистрация
    14.07.2009
    Адрес
    Архангельск
    Сообщений
    82
    Получено (+/-): 0/0

    По умолчанию

    наверно, один и тот-же класс, несколько раз встречаеться в ship, и всё это суммируеться


    соединение
    from Classes left outer join Ships on Classes.class=Ships.class

    условие счёта
    (Outcomes.ship=Ships.name and Ships.name IS NOT NULL)

    это надо по содержимым табличек проверить

    0 Not allowed! Not allowed!

  15. #14
    Пользователь Аватар для nvv13
    Регистрация
    14.07.2009
    Адрес
    Архангельск
    Сообщений
    82
    Получено (+/-): 0/0

    По умолчанию

    достаем внутренний подзапрос
    сколько раз один и тот же класс встретиться?
    select Classes.class as class,
    (select count(Outcomes.ship) from Outcomes where
    (
    (Outcomes.ship=Classes.class and Ships.name IS NULL)
    or
    (Outcomes.ship=Ships.name and Ships.name IS NOT NULL)
    ) and Outcomes.result='sunk'
    ) as Sunks
    from Classes left outer join Ships on Classes.class=Ships.class
    order by Classes.class

    0 Not allowed! Not allowed!

  16. #15
    Заблокирован
    Регистрация
    25.06.2009
    Адрес
    Архангельск 2 л\з
    Сообщений
    943
    Получено (+/-): 0/0

    По умолчанию

    В том то и дело, что результатов второй базы не видно, на первой базе, такой же что и твой результат, а ответ от второй базы мы получаем только в виде количества несовпадений.
    Но вс равно ошибки понять не могу? Если он встретился в шипс - его надо про суммировать при условии, что он в Outcomes есть как потопленный. Так и идет сумма по классу. Я уже весь запутался. В чем вся и сложность, что не видишь результатов второй базы...

    0 Not allowed! Not allowed!

  17. #16
    Пользователь Аватар для nvv13
    Регистрация
    14.07.2009
    Адрес
    Архангельск
    Сообщений
    82
    Получено (+/-): 0/0

    По умолчанию

    внутренний подзапрос можно ещё под, переделать в :
    select class,Sunks=max(Sunks) from
    (select Classes.class as class,
    (select count(Outcomes.ship) from Outcomes where
    (
    (Outcomes.ship=Classes.class and Ships.name IS NULL)
    or
    (Outcomes.ship=Ships.name and Ships.name IS NOT NULL)
    ) and Outcomes.result='sunk'
    ) as Sunks
    from Classes left outer join Ships on Classes.class=Ships.class
    ) as dfg
    group by class

    итого, можно попробовать так:
    select class,sum(Sunks) as Sunks
    from
    (
    select class,Sunks=max(Sunks) from
    (select Classes.class as class,
    (select count(Outcomes.ship) from Outcomes where
    (
    (Outcomes.ship=Classes.class and Ships.name IS NULL)
    or
    (Outcomes.ship=Ships.name and Ships.name IS NOT NULL)
    ) and Outcomes.result='sunk'
    ) as Sunks
    from Classes left outer join Ships on Classes.class=Ships.class
    ) as dfg
    group by class
    ) as zapros
    group by class

    0 Not allowed! Not allowed!

  18. #17
    Пользователь Аватар для nvv13
    Регистрация
    14.07.2009
    Адрес
    Архангельск
    Сообщений
    82
    Получено (+/-): 0/0

    По умолчанию

    Цитата Сообщение от KLIM Посмотреть сообщение
    В том то и дело, что результатов второй базы не видно, на первой базе, такой же что и твой результат, а ответ от второй базы мы получаем только в виде количества несовпадений.
    Но вс равно ошибки понять не могу? Если он встретился в шипс - его надо про суммировать при условии, что он в Outcomes есть как потопленный. Так и идет сумма по классу. Я уже весь запутался. В чем вся и сложность, что не видишь результатов второй базы...
    аа, какие они хитрые...

    0 Not allowed! Not allowed!

  19. #18
    Заблокирован
    Регистрация
    25.06.2009
    Адрес
    Архангельск 2 л\з
    Сообщений
    943
    Получено (+/-): 0/0

    По умолчанию

    Цитата Сообщение от nvv13 Посмотреть сообщение

    итого, можно попробовать так:
    select class,sum(Sunks) as Sunks
    from
    (
    select class,Sunks=max(Sunks) from
    (select Classes.class as class,
    (select count(Outcomes.ship) from Outcomes where
    (
    (Outcomes.ship=Classes.class and Ships.name IS NULL)
    or
    (Outcomes.ship=Ships.name and Ships.name IS NOT NULL)
    ) and Outcomes.result='sunk'
    ) as Sunks
    from Classes left outer join Ships on Classes.class=Ships.class
    ) as dfg
    group by class
    ) as zapros
    group by class
    На первой базе все норм, но на второй несовпадений 4, мой выдавал 2 несовпадения.

    0 Not allowed! Not allowed!

  20. #19
    Пользователь Аватар для nvv13
    Регистрация
    14.07.2009
    Адрес
    Архангельск
    Сообщений
    82
    Получено (+/-): 0/0

    По умолчанию

    поменять имя забыли Ships.name IS NULL тогда Classes.class
    select class,sum(Sunks) as Sunks
    from
    (
    select class,Sunks=max(Sunks) from
    (select case when Ships.name IS NULL
    then Classes.class
    else Ships.name
    end
    as class,
    (select count(Outcomes.ship) from Outcomes where
    (
    (Outcomes.ship=Classes.class and Ships.name IS NULL)
    or
    (Outcomes.ship=Ships.name and Ships.name IS NOT NULL)
    ) and Outcomes.result='sunk'
    ) as Sunks
    from Classes left outer join Ships on Classes.class=Ships.class
    ) as dfg
    group by class
    ) as zapros
    group by class

    0 Not allowed! Not allowed!

  21. #20
    Пользователь Аватар для nvv13
    Регистрация
    14.07.2009
    Адрес
    Архангельск
    Сообщений
    82
    Получено (+/-): 0/0

    По умолчанию

    ой, а имя то нужно Ships.class
    select class,sum(Sunks) as Sunks
    from
    (
    select class,Sunks=max(Sunks) from
    (select case when Ships.name IS NULL
    then Classes.class
    else Ships.class
    end
    as class,
    (select count(Outcomes.ship) from Outcomes where
    (
    (Outcomes.ship=Classes.class and Ships.name IS NULL)
    or
    (Outcomes.ship=Ships.name and Ships.name IS NOT NULL)
    ) and Outcomes.result='sunk'
    ) as Sunks
    from Classes left outer join Ships on Classes.class=Ships.class
    ) as dfg
    group by class
    ) as zapros
    group by class

    0 Not allowed! Not allowed!
    Последний раз редактировалось nvv13; 31.08.2009 в 11:08. Причина: попутал

Страница 1 из 3 123 ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Внести пожертвование на развитие!