Как СУММИРОВАТЬ значения столбцов из нескольких строк с помощью SQL

#mysql #sql #sum #mariadb

Вопрос:

У меня есть таблица в MySQL, в которой перечислены покупки акций пользователя (так что есть несколько строк одного и того же запаса с разными ценами и количеством).

Я хотел бы знать, как я могу перечислить уникальные акции, указав только сумму всех акций и общую сумму, потраченную на эти акции.

Так, например, вот исходная таблица,

  ------------ -------- ----------- 
| ticker     | shares | price     |
 ------------ -------- ----------- 
| AMARAJABAT |      5 |  720.0000 |
| AMARAJABAT |      5 |  732.0000 |
| ENDURANCE  |      2 | 1650.0000 |
| ENDURANCE  |      2 | 1750.0000 |
| EXIDEIND   |     21 |  163.5000 |
| EXIDEIND   |     21 |  172.1000 |
 ------------ -------- ----------- 
 

и выберите из таблицы, чтобы получить акции*цена,

SELECT ticker,shares,price,shares*price AS spent FROM bought ORDER BY ticker;

  ------------ -------- ----------- ------------ 
| ticker     | shares | price     | spent      |
 ------------ -------- ----------- ------------ 
| AMARAJABAT |      5 |  720.0000 |  3600.0000 |
| AMARAJABAT |      5 |  732.0000 |  3660.0000 |
| ENDURANCE  |      2 | 1650.0000 |  3300.0000 |
| ENDURANCE  |      2 | 1750.0000 |  3500.0000 |
| EXIDEIND   |     21 |  163.5000 |  3433.5000 |
| EXIDEIND   |     21 |  172.1000 |  3614.1000 |
 ------------ -------- ----------- ------------ 
 

И я хотел бы фактически суммировать значения столбцов акций (для одной и той же акции) и сумму, потраченную на каждую. т. е. вывод,

  ------------ ------------- ------------ 
| ticker     | SUM(shares) | SUM(spent) |
 ------------ ------------- ------------ 
| AMARAJABAT |          10 |  7260.0000 |
| ENDURANCE  |           4 |  6800.0000 |
| EXIDEIND   |          42 |  7047.6000 |
 ------------ ------------- ------------ 
 

но, похоже, не могу понять, как я могу суммировать несколько столбцов и строк ticker .

Заранее спасибо!

Комментарии:

1. GROUP BY ticker ?

2. не работает 🙁 (показывает только акции и цену последней строки, соответствующие каждому тикеру)

Ответ №1:

просто сгруппируйтесь по :

 select ticker , sum(shares), sum(spent)
from bought
group by ticker
order by ticker;
 

Ответ №2:

Суммируйте shares и shares * price и сгруппируйте по ticker .

 SELECT ticker, SUM(shares) AS 'Total Shares', SUM(shares * price) AS `Total Spent`
FROM bought
GROUP BY ticker
ORDER BY ticker;