Можно ли сгруппировать записи и суммы - PullRequest
0 голосов
/ 02 мая 2020

Я новичок в mysql и php это возможно? У меня есть таблица, называемая точками, это моя таблица

id  | b_id  | amount | side
1       1          500         1
2       1          900         1
3       1          600         1
4       1          300         1
5       2          400         1
6       2          500         1
7       2          800         1
8       2          100         1

Я хочу суммировать каждую сумму по группам и вычитать сумму каждой группы до последнего идентификатора каждой группы, я не знаю, как я могу достигните этого

Результат будет таким

id  | b_id  | amount | side
1       1          500         1
2       1          900         1
3       1          600         1
4       1          2000       1
5       2          400         1
6       2          500         1
7       2          800         1
8       2          1700       1

Спасибо

1 Ответ

0 голосов
/ 02 мая 2020

Не самый элегантный, пожалуй.

DROP TABLE IF EXISTS T;

create table t
(id  int, b_id  int, amount int, side int);
insert into t values
(1  ,     1      ,    500   ,      1),
(2  ,     1      ,    900   ,      1),
(3  ,     1      ,    600   ,      1),
(4  ,     1      ,    300   ,      1),
(5  ,     2      ,    400   ,      1),
(6  ,     2      ,    500   ,      1),
(7  ,     2      ,    800   ,      1),
(8  ,     2      ,    100   ,      1);
select t.*,
         case when id = maxid then amt
         else amount
         end as amount
from t
left join
    (
    select b_id,sum(amount) amt from t where id <> (select max(id) from t t1 where t1.b_id = t.b_id)
    group by b_id
    ) s on s.b_id = t.b_id
left join
    (select b_id,max(id) maxid from t group by b_id) a on a.b_id = t.b_id

+------+------+--------+------+--------+
| id   | b_id | amount | side | amount |
+------+------+--------+------+--------+
|    1 |    1 |    500 |    1 |    500 |
|    2 |    1 |    900 |    1 |    900 |
|    3 |    1 |    600 |    1 |    600 |
|    4 |    1 |    300 |    1 |   2000 |
|    5 |    2 |    400 |    1 |    400 |
|    6 |    2 |    500 |    1 |    500 |
|    7 |    2 |    800 |    1 |    800 |
|    8 |    2 |    100 |    1 |   1700 |
+------+------+--------+------+--------+
8 rows in set (0.003 sec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...