|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
Надо найти для производителя и модели максимальную цену. Код: sql 1. 2. 3. 4.
И все бы хорошо, если бы не условие, которое гласит, что цена null, то пусть null и выведет. В ином случае- вывести максимальную цену. Код: sql 1.
При попытке вставить данную строку в селект вылезает ошибка, требующая добавить данную строку и в group by. Но в таком случае интерпретатор просто выводит все строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 13:01 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
Murmakil И все бы хорошо, если бы не условие, которое гласит, что цена null, то пусть null и выведет. Что выводит max, если цена null? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 13:25 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
Murmakil, И при чём тут форум "Вакансии"? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 13:30 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
alexeyvg, да голова занята запросом. проглядел =) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 13:48 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
wadman, на самом деле значений null в таблице нет. Это просто такой изощренный способ поиздеваться ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 13:50 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
Murmakil Код: sql 1.
При попытке вставить данную строку в селект вылезает ошибка, требующая добавить данную строку и в group by. Но в таком случае интерпретатор просто выводит все строки. Вы сами-то понимаете что хотите? Есть два товара по производителю и модели - один стоит 100 рублей, а второй NULL. Вам нужно вывести 100 рублей или NULL? Удивляюсь, то скуль нас нахрен не послал ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 14:05 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
SQL2008, если null, то так и вывести null. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 14:10 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
Murmakil, ничего не понял. вот описание МАХ() При выполнении функции MAX все значения NULL пропускаются. MAX возвращает NULL, если нет строк для выбора. Т.е. если NULL присутствует и является единственным, то NULL и выведется Пример: натравливаем запрос Select product.maker, pc.model, max(pc.price) as m_price from product, pc where product.model=pc.model group by product.maker, pc.model результат maker model m_price B 1121 850,00 A 1232 600,00 A 1233 980,00 E 1260 350,00 B 1261 NULL ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 14:25 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
Murmakil SQL2008, если null, то так и вывести null. Т.е. если есть хоть одна цена NULL, то уже не ищем макимальную, а выводим NULL? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 14:34 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
SQL2008, нет. если в строке есть null, то просто вывести эту строку как есть ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 15:33 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
godsql, вот условие, прям скопировал. если среди цен на продукцию данного производителя присутствует NULL, то выводить для этого производителя NULL, иначе максимальную цену ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 15:35 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
Murmakil, загоняй case под max. Или вместо case проще использовать iif. Кстати, версия сервака играет роль? Что за сервак? Модератор: Тема перенесена из форума "Вакансии". ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 16:37 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
godsql, именно. задача 41. Причем мой код выдает верные результаты, но ответ не засчитывается. Полагаю, из-за того, что не вписал это условие ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 16:52 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
KreatorXXI, добавил в селект max(case when m_price is not null then m_price end) as m_price. Все равно не засчитывает, хоть код и выдает нужный результат. задача с sql-ex. Версию точно не помню ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 17:45 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
Murmakil, х.з., у меня сохранен такой код :) Не сильно оптимален, но вполне проходит. with t1 (maker, price) as (select p.maker, pc.price from Product P join PC on p.model=pc.model and p.type='PC' union select p.maker, L.price from Product P join Laptop L on p.model=L.model and p.type='Laptop' union select p.maker, pr.price from Product P join Printer Pr on p.model=Pr.model and p.type='Printer') select t3.maker, case when not exists (select t2.price from t1 t2 where t2.price is null and t2.maker=t3.maker) then max(t3.price) else NULL end from t1 t3 group by t3.maker ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 18:35 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
в общем-то, задача бьется на 3 таблицы: общая производителей, модели и производители, у которых есть модели с null Поскольку exists работает быстрее всего, проще, для начала, выделить модели с null и найти их производителей, а потом слить с остальными таблицами. Это будет лучше по производительности, чем у меня раньше ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 18:46 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
Murmakil, попробуй сделать по моему образцу (у меня работает как надо): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Если очень нужен case, поставь case. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 20:00 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
Murmakil, просто загнать case под max ничего не даст. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2020, 20:02 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
godsql, вот мое решение. есть идеи почему система не засчитывает ответ, хоть он и правильный? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 09:20 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
Murmakil, вы неправильно восприняли условия задачи. Я так понимаю, что "не проходит проверку на дополнительной базе"? Нужно, если есть модель с price=null, прекращать вычисление Max и вывести Null для этого производителя. Т.е., если exists (price (model->maker) is null), то maker, m_price=Null А вы, в max(case when m_price is not null then m_price end) - просто делаете ненужную работу, т.к. Мах сам пропускает "Null". Я же вам скинул работающий запрос! Для опытов просто добавьте модель с Null ценой и увидите сами. должно получиться что-то вроде maker (Отсутствует имя столбца) A 1150,00 B NULL C 970,00 D 400,00 E 350,00 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 11:22 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
godsql, ну так я ваш код и скормил системе. другое дело, что попадись мне снова подобная задача и я дурак дураком снова буду. так я правильно понял, что ошибка в том, что case составил неверно? Код: sql 1.
а зачем создавать аж 3 копии таблицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 12:22 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
Murmakil, нет, логика неправильная вы сначала вычисляете МАх по всем моделям (игнорируя наличие null), а case вообще делает ненужные движения и max(case) покажет Null только если у данного производителя отсутствуют модели я же вам написал, как доработать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 12:37 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
Murmakil godsql, ну так я ваш код и скормил системе. другое дело, что попадись мне снова подобная задача и я дурак дураком снова буду. так я правильно понял, что ошибка в том, что case составил неверно? Код: sql 1.
а зачем создавать аж 3 копии таблицы? не помню :) я ж говорю - не оптимизирован код :) Кстати, вот этот case и делает то самое, что вы пытались запихнуть под max ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 12:40 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
alexeyvg Murmakil, И при чём тут форум "Вакансии"? Похоже навеяло названием "Как воткнуть" ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 13:35 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
godsql, а в каких случаях требуется создавать копии таблиц? сорян за, вероятно, глупый вопрос:) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 15:02 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
кажется, начинаю понимать в каких. сейчас щелкнул пару задачек, на которых раньше был ступор ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 16:34 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
Murmakil, Это не копии таблиц, а алиасы(псевдонимы). Таблица одна и та же, но позволяет обращаться к ней, как с двумя и более. Для чего? К примеру, простейший селект по нахождению дублей в таблице потребует сравнения разных значений одного и того же поля. Для этого просто назначаются разные алиасы для обращения к одной-единственной таблице. В общем, используют для удобства :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 20:16 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
godsql, где с вами можно пообщаться? у меня многие задачи система не засчитывает из-за проверочной базы, а каждый раз создавать тему вроде как неудобно ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 14:51 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
Murmakil, кидайте сюда. Попробую помочь. Но в общем-то, ничего сложного, окромя нескольких задач, где неправильно составлено условие и нужно доходить долго и нудно :) Часто простым distinct решается проблема. еще можно писать админам, они могут подсказать, в каком направлении копать. PS. В принципе, в интернете есть сайт с ответами. Но это уже когда совсем все плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 18:58 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
godsql, задача 56. мое решение не засчитывается из-за проверочной базы. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2020, 17:04 |
|
Как воткнуть case в запрос?
|
|||
---|---|---|---|
#18+
Murmakil, прочти FAQ к этой задаче FAq разблокируется после нескольких неверных попыток Там описывается, почему у тебя ошибка К сожалению, это из-за того, что логика построения табличных отношений в БД специально изначально кривая select t.class, sum(t.cnt) from ( select s.class, 1 cnt, o.ship from ships s join outcomes o on o.ship = s.name where o.result = 'sunk' union select c.class, 1 cnt, o.ship from classes c join outcomes o on o.ship = c.class where o.result = 'sunk' union select c.class, 0 cnt, '' from classes c ) t group by t.class Модератор: На этой ноте и закончим решать тестовые задачи всем миром ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2020, 19:51 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1686186]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 277ms |
total: | 420ms |
0 / 0 |