Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
Sergant82
Member

Откуда:
Сообщений: 490
Есть три столбца в которых содержатся суммы.
Нужно посчитать процент для каждой суммы в каждом столбце от общей суммы всех трех столбцов.
12 фев 07, 16:12    [3772602]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
sumus
Guest
col1 / (col1+col2+col3) * 100
col2 / (col1+col2+col3) * 100
col3 / (col1+col2+col3) * 100
это?
12 фев 07, 16:18    [3772646]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
Sum_percent
Guest
create table t(n1 number,n2 number,n3 number);

insert into t values (1,3,6);

select n1,n2,n3 from t
union
select 100*n1/(n1+n2+n3),100*n2/(n1+n2+n3),100*n3/(n1+n2+n3) from t;
12 фев 07, 16:19    [3772653]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
-k2-
Member

Откуда:
Сообщений: 5184
можно оттолкнуться от
with t as
(select 1 col1, 1 col2 from dual union all
select 1, 1 from dual union all
select 1, 2 from dual union all
select 1, 1 from dual union all
select 1, 3 from dual)
select col1, col2, sum(col1+col2)over(partition by null) from t
12 фев 07, 16:19    [3772655]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
zirex
Member

Откуда:
Сообщений: 714
если правильно понял, то..
with tab as (
select 1 as sum1, 2 as sum2, 3 as sum3 from dual union all
select 2 as sum1, 21 as sum2, 35 as sum3 from dual union all
select 3 as sum1, 22 as sum2, 36 as sum3 from dual union all
select 4 as sum1, 23 as sum2, 37 as sum3 from dual union all
select 5 as sum1, 24 as sum2, 38 as sum3 from dual union all
select 6 as sum1, 25 as sum2, 39 as sum3 from dual
)
select sum1, sum2, sum3, total_sum, 
    round(sum1 / total_sum, 4) as perc_sum1,
    round(sum2 / total_sum, 4) as perc_sum2,
    round(sum3 / total_sum, 4) as perc_sum3
from (
    select sum1, sum2, sum3, sum(sum1 + sum2 + sum3) over () as total_sum from tab
)

SUM1                   SUM2                   SUM3                   TOTAL_SUM              PERC_SUM1              PERC_SUM2              PERC_SUM3              
---------------------- ---------------------- ---------------------- ---------------------- ---------------------- ---------------------- ---------------------- 
1                      2                      3                      326                    0.0031                 0.0061                 0.0092                 
2                      21                     35                     326                    0.0061                 0.0644                 0.1074                 
3                      22                     36                     326                    0.0092                 0.0675                 0.1104                 
4                      23                     37                     326                    0.0123                 0.0706                 0.1135                 
5                      24                     38                     326                    0.0153                 0.0736                 0.1166                 
6                      25                     39                     326                    0.0184                 0.0767                 0.1196                 

6 rows selected
12 фев 07, 16:21    [3772671]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
Sergant82
Member

Откуда:
Сообщений: 490
Не совсем ведь строк несколько может быть
12 фев 07, 16:22    [3772678]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
Sergant82
Member

Откуда:
Сообщений: 490
Опоздал с ответом на первый ответ.
Сейчас попробую Ваши варианты.
12 фев 07, 16:23    [3772696]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
Проходящий
Member

Откуда:
Сообщений: 69
Или вот:
SELECT n1, n1 / t_sum.sum_per_row * 100 || '%' p, 
       n2, n2 / t_sum.sum_per_row * 100 || '%' p, 
       n3, n3 / t_sum.sum_per_row * 100 || '%' p
FROM t, (SELECT n1 + n2 + n3 sum_per_row FROM t) t_sum
12 фев 07, 16:31    [3772749]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
Проходящий
Member

Откуда:
Сообщений: 69
это был не я.
12 фев 07, 16:31    [3772756]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
Проходящий
Member

Откуда:
Сообщений: 69
Вот я:
SELECT n1, n1 / t_sum.sum_per_row * 100 || '%' p, 
       n2, n2 / t_sum.sum_per_row * 100 || '%' p, 
       n3, n3 / t_sum.sum_per_row * 100 || '%' p
FROM t, (SELECT rowid ri,n1 + n2 + n3 sum_per_row FROM t) t_sum
where t.rowid=t_sum.ri
12 фев 07, 16:33    [3772771]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
Z
Guest
Проходящий
Вот я:
SELECT n1, n1 / t_sum.sum_per_row * 100 || '%' p, 
       n2, n2 / t_sum.sum_per_row * 100 || '%' p, 
       n3, n3 / t_sum.sum_per_row * 100 || '%' p
FROM t, (SELECT rowid ri,n1 + n2 + n3 sum_per_row FROM t) t_sum
where t.rowid=t_sum.ri

проходи дальше! следующий!
12 фев 07, 16:37    [3772810]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
ROWID_
Guest
Проходящий
rowid


А я тут зачем? :)
12 фев 07, 16:38    [3772819]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
zirex
Member

Откуда:
Сообщений: 714
Проходящий
Вот я:

Один хрен, фигню написал
12 фев 07, 16:38    [3772828]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116077
Решил использовать ratio_to_report со сверткой - разверткой столбцов.

SQL> select max(sal), max(comm), max(rtr_sal), max(rtr_comm)
  2    from (select empno,
  3                 decode(nam, 'SAL', sal_comm) sal,
  4                 decode(nam, 'COMM', sal_comm) comm,
  5                 decode(nam, 'SAL', ratio_to_report(sal_comm) over()) rtr_sal,
  6                 decode(nam, 'COMM', ratio_to_report(sal_comm) over()) rtr_comm
  7            from (select empno, sal sal_comm, 'SAL' nam
  8                    from scott.emp
  9                  UNION ALL
 10                  select empno, nvl(comm, 0), 'COMM' from scott.emp))
 11   group by empno
 12   order by empno
 13  /

  MAX(SAL)  MAX(COMM) MAX(RTR_SAL) MAX(RTR_COMM)
---------- ---------- ------------ -------------
       222          0 0,0070594969             0
       800          0 0,0254396285             0
      1600        300 0,0508792571 0,00953986071
      1250        500 0,0397494196 0,01589976786
      2975          0 0,0946036187             0
      1250       1400 0,0397494196 0,04451935001
      2850          0 0,0906286768             0
      2450          0 0,0779088625             0
      3000          0 0,0953986071             0
      5000          0 0,1589976786             0
      1500          0 0,0476993035             0
      1100          0 0,0349794892             0
       950          0 0,0302095589             0
      3000          0 0,0953986071             0
      1300          0 0,0413393964             0

15 rows selected

SQL> 
12 фев 07, 16:48    [3772920]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
Проходящий
Member

Откуда:
Сообщений: 69
Зочем тгавите. Я любитель:
bool b;
b = false;
if (b.ToString().length < 5){...}
А ваши if (b == true){...} - это слишком просто...
12 фев 07, 16:57    [3772994]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
zirex
Member

Откуда:
Сообщений: 714
Проходящий
А ваши if (b == true){...} - это слишком просто...

тогда уж
if (b) {...}
12 фев 07, 17:03    [3773060]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
Sergant82
Member

Откуда:
Сообщений: 490
to dmidek: Спасибо все получилось.
12 фев 07, 17:12    [3773119]     Ответить | Цитировать Сообщить модератору
 Re: Процент от общей суммы (по трем столбцам) для каждого столбца  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
-k2-
можно оттолкнуться от
with t as
(select 1 col1, 1 col2 from dual union all
select 1, 1 from dual union all
select 1, 2 from dual union all
select 1, 1 from dual union all
select 1, 3 from dual)
select col1, col2, sum(col1+col2)over(partition by null) from t

.. и дотолкаться до ..
with t as (select 
       dbms_random.value s1
      ,dbms_random.value s2 
      ,dbms_random.value s3 
from tab where rownum<11)
select s1, s1*100/sum(s1+s2+s3) over () per_s1
      ,s2, s2*100/sum(s1+s2+s3) over () per_s2
      ,s3, s3*100/sum(s1+s2+s3) over () per_s3
from t;
12 фев 07, 19:56    [3774216]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить