Используя GROUP BY на SQL, чтобы получить сводную информацию о моей таблице транзакций (покупка и продажа) - PullRequest
0 голосов
/ 24 марта 2020

Итак, у меня есть следующая таблица:

выбор * из транзакций

id  symbol  name          shares    price   status  time                 user_id
1   NFLX    Netflix, Inc.   10      371       1     2020-03-24 13:31:17    3
2   AAPL    Apple, Inc.     2       236.24    1     2020-03-24 13:31:43    3
3   NFLX    Netflix, Inc.   2       369.28    2     2020-03-24 13:32:01    3

Я пытаюсь получить такой результат, используя выбор для отображения для пользователя:

id  symbol  name          shares    price   status  time                 user_id
1   NFLX    Netflix, Inc.  **8**    371       1     2020-03-24 13:31:17    3
2   AAPL    Apple, Inc.     2       236.24    1     2020-03-24 13:31:43    3

Акции для NFLX теперь составляют 8 (10 акций со статусом = 1 (покупка) и 2 акции со статусом = 2 (продажа), поэтому 10-2 = 8). Я попытался использовать символ GROUP BY, но полученные результаты не сгруппировали количество акций, они только оставили NFLX с 10 акциями.

Вот предложение, которое я использовал: выберите символ, акции, статус из группы транзакций по символу, акции

symbol  shares  status
AAPL      2       1
NFLX      2       2
NFLX     10       1

Я нахожусь вдали от SQL уже несколько лет, и я действительно заржавел, это так просто, и я не могу пройти через это. Мне грустно: (

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Вы можете сделать условное агрегирование:

select 
    id,
    symbol,
    name,
    sum(case when status = 1 then shares else -shares end) shares
    user_id
from mytable t
group by id, symbol, name, user_id
1 голос
/ 24 марта 2020

Вы можете использовать условное агрегирование для shares:

select symbol,
       sum(case when status = 1 then shares else - shares end) as net_shares
from t
group by symbol;

Неясно, откуда поступают другие столбцы.

...