2016-06-08 3 views
-1

У меня есть таблица вроде этого:Как подсчитать столбцы, основанные на другом столбце?

ID  Item Total 
P-001 ATK001 1500 
P-002 ATK001 1750 
P-002 ATK002 1250 
P-003 ATK001 175 
P-003 ATK002 350 
P-003 ATK003 400 
P-003 CTK001 750 
P-003 CTK002 750 
P-005 ATK004 500 
P-005 ATK117 475 
P-005 CTK009 1200 
P-005 ATK001 400 
P-005 ATK002 125 

Я хотел бы подвести в столбце «Всего» основано на колонке «Item». Я создал несколько запросов MySQL и вывод был таким:

P-001 ATK001 3825 
P-002 ATK002 1725 
P-003 ATK003 400 
P-005 ATK004 500 
P-005 ATK117 475 
P-003 CTK001 750 
P-003 CTK002 750 
P-005 CTK009 1200 

Мой желаемый результат:

ID  Item Total 
P-001 ATK001 3825 
P-002 ATK001 3825 
P-002 ATK002 1725 
P-003 ATK001 3825 
P-003 ATK002 1725 
P-003 ATK003 400 
P-003 CTK001 750 
P-003 CTK002 750 
P-005 ATK004 500 
P-005 ATK117 475 
P-005 CTK009 1200 
P-005 ATK001 3825 
P-005 ATK002 1725 

Спасибо за вашу помощь :)

+1

Вы можете добавить SQL у вас есть S Вопрос далеко? Также вы можете объяснить, как эти суммы рассчитываются в желаемом выходе? – Dijkgraaf

ответ

5

Попробуйте это;)

SQL Fiddle

MySQL 5.6 Схема:

CREATE TABLE table1 
    (`ID` varchar(5), `Item` varchar(6), `Total` int) 
; 

INSERT INTO table1 
    (`ID`, `Item`, `Total`) 
VALUES 
    ('P-001', 'ATK001', 1500), 
    ('P-002', 'ATK001', 1750), 
    ('P-002', 'ATK002', 1250), 
    ('P-003', 'ATK001', 175), 
    ('P-003', 'ATK002', 350), 
    ('P-003', 'ATK003', 400), 
    ('P-003', 'CTK001', 750), 
    ('P-003', 'CTK002', 750), 
    ('P-005', 'ATK004', 500), 
    ('P-005', 'ATK117', 475), 
    ('P-005', 'CTK009', 1200), 
    ('P-005', 'ATK001', 400), 
    ('P-005', 'ATK002', 125) 
; 

Запрос 1:

select t1.ID, t1.Item, t2.Total 
from table1 t1 
inner join(
    select Item, sum(Total) as Total from table1 group by Item 
) t2 on t1.Item = t2.Item 

Results:

| ID | Item | Total | 
|-------|--------|-------| 
| P-001 | ATK001 | 3825 | 
| P-002 | ATK001 | 3825 | 
| P-002 | ATK002 | 1725 | 
| P-003 | ATK001 | 3825 | 
| P-003 | ATK002 | 1725 | 
| P-003 | ATK003 | 400 | 
| P-003 | CTK001 | 750 | 
| P-003 | CTK002 | 750 | 
| P-005 | ATK004 | 500 | 
| P-005 | ATK117 | 475 | 
| P-005 | CTK009 | 1200 | 
| P-005 | ATK001 | 3825 | 
| P-005 | ATK002 | 1725 | 
+0

большое вам спасибо. – Vahn

2
SELECT 
    T1.ID, 
    T2.Item, 
    Sum(T2.Total) 
FROM 
    TABLE T1, 
    TABLE T2 
GROUP BY T1.ID, T2.Item; 
+2

Этот запрос неверен. Это дает совсем другой результат. –

+0

@ Kasim добавить описание и объяснить, как это будет работать? –

+0

@Vahn Он использует только одну таблицу, но его запрос не дает правильного результата. (@Ani правильно указал) –

1
SELECT 
    id, 
    item, 
    (
     SELECT 
      sum(total) 
     FROM 
      items i2 
     WHERE 
      i1.item = i2.item 
    ) AS total 
FROM 
    items i1 
Смежные вопросы