Несколько величин из одной таблицы

barbaris841
Дата: 30.09.2015 10:46:15
Как посчитать несколько величин для одной большой таблицы, не задавая ее каждый раз?
Мне нужно как можно сильнее сократить код.
Написать в одном селекте через запятую не получится, потому что считаются эти величины при разных условиях.
Я привел все коды к виду
select a, b
from (select ...)
where ...
Во внутреннем селекте очень много всего, мне нужно писать его один раз, чтобы это не выглядело громоздко.
Добрый Э - Эх
Дата: 30.09.2015 10:56:02
почитать про WITH-subquery clause?
JDS
Дата: 30.09.2015 11:01:45
barbaris841
Написать в одном селекте через запятую не получится, потому что считаются эти величины при разных условиях

Ну и может case сюда же )
barbaris841
Дата: 30.09.2015 11:09:08
Добрый Э - Эх,

Да, спасибо, это почти то, что мне нужно.
Задам в начале эту большую таблицу и буду далее обращаться к ней.
Простите за глупые вопросы, я только учусь.
Кстати, мой наставник ничего не рассказывал про конструкции с with, я думаю, что он ждет от меня другого решения этой задачи.
barbaris841
Дата: 30.09.2015 11:12:59
JDS,

Можете подробнее рассказать про конструкции с case?
Я гуглил примеры, но мне кажется, что они не сделают мне того, что я хочу.
Чтобы вы понимали:

Первый код:
select a, count(b)
from (select a, b, c, d from...)
where d=0


Второй:
select a, count(b)
from (select a, b, c, d from...)
where d>0
and c>d


Ну и вывести нужно в одной таблице "a" и оба показателя для него.
JDS
Дата: 30.09.2015 11:18:47
Нечего рассказывать особо, при условии, что (select a, b, c, d from...) одинаково и там и там:
select a, count(case when d>0 and c>d then 1 else 0 end) "Первый показатель",
             count(case when d=0 then 1 else 0 end) "Второй показатель",
from (select a, b, c, d from...)
where (d>0 and c>d) or d=0 -- если нужно
JDS
Дата: 30.09.2015 11:19:36
Точнее вместо count пишем sum конечно
JDS
Дата: 30.09.2015 11:20:42
select a, sum(case when d>0 and c>d then 1 else 0 end) "Первый показатель",
             sum(case when d=0 then 1 else 0 end) "Второй показатель",
from (select a, b, c, d from...)
where (d>0 and c>d) or d=0
stax..
Дата: 30.09.2015 11:36:21
barbaris841
Как посчитать несколько величин для одной большой таблицы, не задавая ее каждый раз?
Мне нужно как можно сильнее сократить код.
Написать в одном селекте через запятую не получится, потому что считаются эти величины при разных условиях.
Я привел все коды к виду
select a, b
from (select ...)
where ...
Во внутреннем селекте очень много всего, мне нужно писать его один раз, чтобы это не выглядело громоздко.

создайте view на основе "внутреннего" select ...

тогда запросы будут
select a, count(b)
from vw
where d=0
group by a

Второй:

select a, count(b)
from vw
where d>0
and c>d
group by a


......
stax
barbaris841
Дата: 30.09.2015 11:48:26
JDS,

Спасибо огромное, это именно то, что мне нужно! Вы лучший в мире.