#sql #database #postgresql #select
#sql #База данных #postgresql #выберите
Вопрос:
У меня есть 3 таблицы customer (cid, имя, телефон) и transactions (cid (ссылка), fundid, дата, акции) и fund (fundid, fund_name).
Я пытаюсь написать sql-запрос, который даст мне общее количество акций для каждого клиента для каждого фонда.
Вот примеры вставок:
INSERT INTO CUSTOMER(1, 'Alex', '123456678');
INSERT INTO CUSTOMER(2, 'Bill', '6323450236');
INSERT INTO CUSTOMER(3, 'Marie', '8568289912');
INSERT INTO FUND (1, 'Docotel');
INSERT INTO FUND (2, 'Armen');
INSERT INTO FUND (3, 'TD');
INSERT INTO TRANSACTIONS(1, 2, '2010-2-12', 234); (means shares bought)
INSERT INTO TRANSACTIONS(3, 1, '2010-4-2', 192);
INSERT INTO TRANSACTIONS(1, 2, '2010-4-22', -45); (the '-' means shares sold)
INSERT INTO TRANSACTIONS(1, 3, '2010-4-26', 220);
INSERT INTO TRANSACTIONS(3, 2, '2010-7-21', 170);
Я хочу, чтобы результат sql выглядел примерно так:
Name| Fund_Name | Total_Shares |
Alex Docotel 189
Alex TD 220
Marie Docotel 192
Marie Armen 170
Спасибо
Ответ №1:
Попробуйте это:
SELECT customer.name, fund.fund_name, T1.total_shares
FROM
(
SELECT cid, fundid, SUM(shares) AS total_shares
FROM transactions
GROUP BY cid, fundid
) T1
JOIN customer ON T1.cid = customer.cid
JOIN fund ON T1.fundid = fund.fundid
ORDER BY customer.name
Комментарии:
1. Будет ли это учитывать результат покупки и продажи акций? Я имею в виду, приведет ли это к покупке акций Docotel Алекса — продаже акций Docotel Алекса?
2. Да, я думаю, делает то, что вы хотите.
3. Спасибо .. это сработало как шарм: D .. Мне просто нужно было добавить sum (T1.total_shares), чтобы получить желаемые результаты.