|
Как воткнуть 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 |
|
|
start [/forum/topic.php?fid=46&msg=39950166&tid=1686186]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 287ms |
total: | 437ms |
0 / 0 |