Здравствуйте, Аноним, Вы писали:
А>Есть такая табличка
А>select max(Поле1), sum(Cумма), sum(Cумма)/sum(sum(Cумма)) from ... А>group by поле1
гммм.. ну и запросик !!! sum(Cумма)/sum(sum(Cумма)) — вот это клёво !!! А>Oracle выдаeт ошибки на первых двух поля типа NOT GROUP BY EXPRESSION А>Помогите написать запрос. А>Заранее спасибо
в один селект у меня не получилось да и кажется это будет очень не оптимально.
зато можно сначала посчитать общую сумму и потом простенький Select
select Поле1 ,sum (Cумма), to_char (sum (Cумма) / доля x )
from ...
group by Поле1
order by Поле1
Здравствуйте, Аноним, Вы писали:
А>Нужно сделать запрос для отчета такого вида А>
А>a | Итого по a | доля a
А>b | Итого по b | доля b
А>c | Итого по с | доля с
А>
А>доля x = (Итого по x)/(Итого по всем) А>Пробовал писать А>
А>select max(Поле1), sum(Cумма), sum(Cумма)/sum(sum(Cумма)) from ...
А>group by поле1
А>
А>Oracle выдаeт ошибки на первых двух поля типа NOT GROUP BY EXPRESSION
А>Помогите написать запрос. А>Заранее спасибо
1) max(Поле1) — что это и зачем ? может просто Поле1
2) sum(Cумма) — что это и зачем ? может просто sum(Поле1)
или я туплю или ...
Re[2]: Помогите написать запрос
От:
Аноним
Дата:
16.07.03 08:56
Оценка:
Здравствуйте, yogi, Вы писали:
Y>Вот те вариантик: Y>
Y>select
Y> Поле1,
Y> sum(Cумма),
Y> sum(Cумма/(select sum(Cумма) from tablename))
Y>from tablename
Y>group by Поле1
Y>
А сколько раз при этом реально будет выполняться
select sum(Cумма) from tablename
(если конкретно рассматривать Oracle)
???
Re[2]: Помогите написать запрос
От:
Аноним
Дата:
16.07.03 09:00
Оценка:
Здравствуйте, KGP, Вы писали:
KGP>Здравствуйте, Аноним, Вы писали:
KGP>1) max(Поле1) — что это и зачем ? может просто Поле1 KGP>2) sum(Cумма) — что это и зачем ? может просто sum(Поле1) KGP>или я туплю или ...
В примере я привел упращенный вариант на самом деле в поле1 храняться некоторые коды групп
а названия групп в другой таблице
приходиться писать вместо поле1 что-то max(другая_таблица.название_группы)
Буду рад увидеть варианты оптимизации на этот счет может last и т.п.
Здравствуйте, KGP, Вы писали:
KGP>Здравствуйте, Аноним, Вы писали:
А>>Нужно сделать запрос для отчета такого вида А>>
А>>a | Итого по a | доля a
А>>b | Итого по b | доля b
А>>c | Итого по с | доля с
А>>
А>>доля x = (Итого по x)/(Итого по всем) А>>Пробовал писать А>>
А>>select max(Поле1), sum(Cумма), sum(Cумма)/sum(sum(Cумма)) from ...
А>>group by поле1
А>>
А>>Oracle выдаeт ошибки на первых двух поля типа NOT GROUP BY EXPRESSION
А>>Помогите написать запрос. А>>Заранее спасибо
KGP>1) max(Поле1) — что это и зачем ? может просто Поле1 KGP>2) sum(Cумма) — что это и зачем ? может просто sum(Поле1) KGP>или я туплю или ...
про 2) снимаю ...
select Поле1, sum(Cумма), sum(Cумма)/(select sum(Cумма) from Table1) from Table1
group by Поле1, order by Поле1
а вот c select sum(Cумма) from Table1 пройдет ?
Re: Помогите написать запрос
От:
Аноним
Дата:
16.07.03 09:06
Оценка:
Подобные штучки типа процента от общего объема, дисперсия и т.п часто можно сделать встроенными средствами репорт-генераторов (в Access, Oracle Reports, Crystal Reports и т.д.)
Эти генераторы строят хитрые запросы или осуществляется дополнительная обработка на стороне клиента?
Здравствуйте, yogi, Вы писали:
Y>Здравствуйте, Dimka, Вы писали:
Y>За $100 я приеду к вам в офис (по Москве) и сделаю чтоб работала
гмм... спасибо конечно...
может удалённо разберёмся
select
Поле1,
sum(Cумма),
sum(Cумма/(select [ВОТ ТУТ]sum(Cумма) from tablename))
from tablename
group by Поле1
Здравствуйте, Dimka, Вы писали:
D>select D>Поле1, D>sum(Cумма), D>sum(Cумма/(select [ВОТ ТУТ]sum(Cумма) from tablename)) D>from tablename D>group by Поле1 D>пишет not a GROUP BY expression D>а то задумка мне понравилаь
Задумки у меня вообще, откровенно говоря, гениальные Можь ты там где скобочки забыл? Я вот сейчас проверил — все пахает как надо.
Здравствуйте, Аноним, Вы писали:
А>Нужно сделать запрос для отчета такого вида А>[sql] А>a | Итого по a | доля a А>b | Итого по b | доля b А>c | Итого по с | доля с
А>доля x = (Итого по x)/(Итого по всем)
В Oracle для этих целей можно использовать аналитические функции.
select distinct a
,sum(b ) over (partition by a) sum
,sum(b ) over () sum_sum
,round(sum(b ) over (partition by a)/sum(b ) over (),2)*100 prozent
from table
Здравствуйте, Аноним, Вы писали:
А>Подобные штучки типа процента от общего объема, дисперсия и т.п часто можно сделать встроенными средствами репорт-генераторов (в Access, Oracle Reports, Crystal Reports и т.д.)
А>Эти генераторы строят хитрые запросы или осуществляется дополнительная обработка на стороне клиента?
в Crystal Reports точно нет хитрых запросов) (по крайней мере в седьмой версии)
всё на стороне клиента