Как сложить все значения на основе двух столбцов - PullRequest
0 голосов
/ 04 мая 2020

У меня есть такие данные:

    user|time|date
    1   |10  |2020-01-01
    1   |15  |2020-01-01
    2   |30  |2020-01-01
    1   |20  |2020-01-02
    1   |20  |2020-01-02

Я хочу добавить сумму (столбец ВРЕМЯ) всех данных, соответствующих критериям, к каждой строке (сумма строк, имеющих одинаковые USER и DATE, например, user = 1 , дата = 2020-01-01). Я хочу использовать сумму позже, чтобы вычислить процент

user|time|date      |sum
1   |10  |2020-01-01|25
1   |15  |2020-01-01|25
2   |30  |2020-01-01|30
1   |20  |2020-01-02|40
1   |20  |2020-01-02|40

Может кто-нибудь дать мне подсказку, как go об этом?

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Для MySql 8.0+ это можно сделать с помощью оконной функции SUM():

select *, sum(time) over (partition by user, date) `sum`
from tablename
order by date, user

См. Демоверсию . Результаты:

| user | time | date               | sum |
| ---- | ---- | ------------------ | --- |
| 1    | 10   | 2020-01-01         | 25  |
| 1    | 15   | 2020-01-01         | 25  |
| 2    | 30   | 2020-01-01         | 30  |
| 1    | 20   | 2020-01-02         | 40  |
| 1    | 20   | 2020-01-02         | 40  |
1 голос
/ 04 мая 2020

Чтобы отобразить сумму в каждой строке, вы должны вычислить ее в отдельном запросе и присоединить к таблице.

SELECT t.user, t.`time`, t.`date`, st.mySum
FROM your_table t
JOIN (
    SELECT user, `date`, SUM(`time`) AS mySum
    FROM your_table
    GROUP BY user, `date` 
) st ON t.user = st.user AND t.`date` = st.`date`

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...