Сумма на основе одинаковых значений в другом столбце - PullRequest
0 голосов
/ 26 ноября 2018

Это моя таблица с именем USAGE_TABLE:

SUB_ID  SESSION_ID  SPLIT  DURATION
1111    2468D       S1     50
1111    2468D       S2     100
1111    3333A       N      5
1111    2468D       S3     25
2222    1357C       S1     200
2222    1357C       S2     300
2222    1357C       S3     400
2222    4444B       N      20

Я хочу вернуть все записи, но для тех, которые имеют значение SPLIT, отличное от 'N', я хочу иметь столбец с суммойдлительность для всех записей с одинаковым SESSION_ID.Итак, для вышесказанного мне хотелось бы:

SUB_ID  SESSION_ID  TOTAL_DURATION
1111    2468D       175
1111    3333A         5
2222    1357C       900
2222    4444B        20 

Я новичок в SQL, поэтому ниже была моя первоначальная попытка использования CASE, но она явно ошибочна.Может кто-нибудь помочь с тем, как я мог бы сделать эту агрегацию?

SELECT SUB_ID,
SESSION_ID,
CASE
    WHEN SPLIT != ‘N’ THEN SUM(DURATION) FROM USAGE_TABLE GROUP BY SESSION_ID
    ELSE DURATION
END AS TOTAL_DURATION
FROM USAGE_TABLE

1 Ответ

0 голосов
/ 27 ноября 2018

GROUP BY имеет значение;отметьте DECODE в пределах:

SQL> with usage_table (sub_id, session_id, split, duration) as
  2    (select 1111, '2468D', 'S1',  50 from dual union all
  3     select 1111, '2468D', 'S2', 100 from dual union all
  4     select 1111, '3333A', 'N',    5 from dual union all
  5     select 1111, '2468D', 'S3',  25 from dual union all
  6     --
  7     select 2222, '1357C', 'S1', 200 from dual union all
  8     select 2222, '1357C', 'S2', 300 from dual union all
  9     select 2222, '1357C', 'S3', 400 from dual union all
 10     select 2222, '1357C', 'N',   20 from dual
 11    )
 12  SELECT sub_id, session_id, sum(duration) total_duration
 13  from usage_table
 14  group by sub_id, session_id, decode(split, 'N', 1, 2)
 15  order by sub_id, session_id;

    SUB_ID SESSI TOTAL_DURATION
---------- ----- --------------
      1111 2468D            175
      1111 3333A              5
      2222 1357C             20
      2222 1357C            900

SQL>
...