sumowanie wystąpienia wartości dodatnich oraz ujemnych

0

mam tabelę w której mam dane:

trader_id order_nbr symbol gross_pl net_pl event_date time
XXXXYYYY 1628975482 ZTR 0.0000 -0.0200 2010-06-01 1524.199
XXXXYYYY 1628975482 ZTR 0.0000 -0.0100 2010-06-01 1508.302
XXXXYYYY 1628975480 RAD 0.0000 0.0300 2010-06-01 1541.44
XXXXYYYY 1628975479 DHF 0.0000 0.0400 2010-06-01 1501.237
XXXXYYYY 1628975479 DHF 0.0000 0.0125 2010-06-01 1542.613
XXXXYYYY 1628975479 DHF 0.0000 0.0125 2010-06-01 1558.52

chcę uzyskać takie zapytanie, aby dla distinct(order_nbr) sprawdzało czy net_pl >= 0, oraz net_pl < 0, i sumowało wystąpienie tych wartości (nie sum(net_pl)), czyli uzyskać taki wynik:

trader_id net_pl_plus net_pl_minus
XXXXYYYY 2 1

0

nie bardzo wiem co chcesz uzyskać bo ciężko mi powiązać wynik, którego oczekujesz z danymi i warunkiem, który opisałeś

0

Użyj CASE WHEN... w SELECT.

0

Nie distinct, tylko group by, a w sumach jak napisał AdamPL uzywasz case. W pierwszej sum sumujesz tylko większe od, równe zero, w drugiej ujemne.
Ot 10 sekund klepania w klawisze, bo ja wolno piszę :)

0

No to chłopak poszalał. Ale to kolejny przykład pokazujący że ludzie nie potrafią sformułować istoty problemu i to podobno wykształceni, grrrrr
Się nie dziwię, że później powstają takie rysuneczki jak ten z huśtawką z opony obrazujący co chciał klient, a co zrozumiał programista.

0

massther masz rację, nie wiedziałem jak sformułować w czym jest problem, ponieważ cały czas miałem w głowie, że bez DISTINCT się nie obejdzie, nie wpadłem aby użyć podzapytania (tak to jest jak się rzadko używa sql),
rozwiązanie przedstawiono na innym forum:

select trader_id, SUM(CASE WHEN net_pl >= 0 THEN 1.0 ELSE 0.0 END),
SUM(CASE WHEN net_pl < 0 THEN 1.0 ELSE 0.0 END)
from
  (select 
    trader_id,
    order_nbr,
    sum(net_pl) net_pl
  from t
  group by trader_id, order_nbr
  ) t
group by trader_id;

1 użytkowników online, w tym zalogowanych: 0, gości: 1