Как суммировать после удаления дубликатов

#mysql #duplicates

#mysql #дубликаты

Вопрос:

У меня есть один вопрос в mysql.

myTable прямо внизу.

 Location     Name           Stock
A-site       Keyboard       2
A-site       Mouse          1
B-site       Keyboard       2
D-site       Monitor        1
A-site       Keyboard       -1
C-site       Desktop        1
 

Я хотел бы выразить это так:

 Name         A-site   B-site   C-site   D-site    Total
Keyboard     1        2        0        0         3
Mouse        1        0        0        0         1
Monitor      0        0        0        1         1
Desktop      0        0        1        0         1
 

необходимы дедупликация и суммирование.

Пожалуйста, помогите мне, как сделать запрос в mysql.

Спасибо.

Позже добавлено: «Местоположение» — это переменная. Итак, чтобы использовать sum путем сравнения, например SUM (ЕСЛИ ..), Мне нужно заранее знать дедуплицированный список. Суть этого вопроса заключается в следующем.

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

1. Вы видели этот «учебник»

2. Рассмотрите возможность решения проблем отображения данных (например, сводной таблицы) в коде приложения. И не включайте «хочу» в вопросы, если активно не ищете отрицательные голоса.

3. @Noah Boegli, спасибо за ответ.

4. @Strawberry Спасибо за ответ. хорошо, я постараюсь быть осторожным в формулировках.

Ответ №1:

Это pivot проблема. Это может быть решено следующим запросом:

 select 
    Name,
    sum(if(Location = 'A-site', Stock, 0)) as `A-site`,
    sum(if(Location = 'B-site', Stock, 0)) as `B-site`,
    sum(if(Location = 'C-site', Stock, 0)) as `C-site`,
    sum(if(Location = 'D-site', Stock, 0)) as `D-site`,
    sum(Stock) as total
from stock
group by Name
order by Name
;
 

SQL скрипка

Результат:

  ========== ======== ======== ======== ======== ======= 
| Name     | A-site | B-site | C-site | D-site | total |
 ========== ======== ======== ======== ======== ======= 
| Desktop  | 0      | 0      | 1      | 0      | 1     |
 ---------- -------- -------- -------- -------- ------- 
| Keyboard | 1      | 2      | 0      | 0      | 3     |
 ---------- -------- -------- -------- -------- ------- 
| Monitor  | 0      | 0      | 0      | 1      | 1     |
 ---------- -------- -------- -------- -------- ------- 
| Mouse    | 1      | 0      | 0      | 0      | 1     |
 ---------- -------- -------- -------- -------- ------- 
 

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

1. Спасибо за ответ, круто. Прошу прощения за то, что по моей ошибке пропустил детали. Итак, чтобы записать в командной строке SUM (IF …), мне нужно знать массив местоположений, который был дедуплицирован заранее, потому что «Местоположение» является переменным каждый день (изменение имени, добавление и удаление …).