Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Программирование

Задачи для обучения SQL-запросам в Супермаге : Программирование

19.04.2024 13:01


12.11.2014 12:38
Mtirt
 
Правильно, не надо подзапроса.
Иди гуглить по ключевым словам: group by и having.
12.11.2014 12:52
BotMan
 
Код:
select  sp.article, 
                             sum(case 
                              when trim(sp.doctype) = 'CS' then sp.quantity 
                               when trim(sp.doctype) = 'CR' then -sp.quantity 
                                end ) as quant,
                             sum(case 
                              when trim(sp.doctype) = 'CS' then sp.totalprice
                               when trim(sp.doctype) = 'CR' then -sp.totalprice
                                end)  as total_$

from smspec sp, smcard crd, smdocuments s

where sp.doctype IN ('CS', 'CR')
and s.id=sp.docid
and sp.doctype = s.doctype
and (s.createdat between '&date1' and '&date2')
and sp.article = crd.article
and crd.idclass in (select idclass from sacardclass where tree like '1.%')
group by sp.article
having                     sum(case when trim(sp.doctype) = 'CS' then sp.quantity 
                               when trim(sp.doctype) = 'CR' then -sp.quantity 
                                end ) < 5
12.11.2014 13:01
Mtirt
 
Ответ правильный. В принципе, вместо цифры 5 можно и переменную добавить, чтобы сделать этот отчет более универсальным.
Вопросы по этому запросу есть?
12.11.2014 13:28
BotMan
 
Вопросов нет! пока )))
12.11.2014 13:31
Mtirt
 
Тогда расскажи мне, в чем разница между условием в разделе where и в having?
Коротко и своими словами...
12.11.2014 13:57
BotMan
 
where работает с перечисленными таблицами после from (smspec sp, smcard crd, smdocuments s), а having работает с результатом сгруппированных строк по средством group by(sp.article, quant, total_$), вроде как то там.
12.11.2014 14:09
Mtirt
 
Не совсем точно. Попробуй еще раз.
12.11.2014 15:56
BotMan
 
почитал поподробней.
where исключающее условие, которое используется до получения результата, а having - фильтрующее условие, которое используется уже после получения результата.
13.11.2014 08:18
Mtirt
 
Угу, если проще: where - фильтр входящих данных, having - фильтр результатов группировки.

Продолжать будем?
Давай попробуем переделать последний запрос так, чтобы увидеть реализацию в динамике: по дням недели, по неделям, или помесячно.
13.11.2014 10:02
BotMan
 
Цитата:
Mtirt Угу, если проще: where - фильтр входящих данных, having - фильтр результатов группировки.

Продолжать будем?
Давай попробуем переделать последний запрос так, чтобы увидеть реализацию в динамике: по дням недели, по неделям, или помесячно.
подсказочку можно, куда копать?
Часовой пояс GMT +3, время: 13:01.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.