[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите сделать двойную группировку
Arcoslov
Всем привет.

Помогите, пожалуйста, сделать группировку из таблицы по двум полям.
Есть таблица `test`. В ней столбцы a, b, c.
Необходимо произвести группировку с суммированием значений в столбце `с` так, чтобы группировались только те строки, где значения в столбцах `a` и `b` совпадают

Выглядит так:
a b c
----------
1 a 10
1 a 10
1 b 20
1 b 20
2 a 30
2 a 30
2 b 40
2 b 40

Результат должен выглядеть так:

a b c
----------
1 a 20
1 b 40
2 a 60
2 b 80
volter9
Arcoslov

Попробуйте так:
SELECT a, b, SUM(c) AS c FROM test GROUP BY b, c ORDER BY a


_____________
Мой блог
Arcoslov
Цитата (volter9 @ 6.02.2015 - 22:01)
Arcoslov

Попробуйте так:
SELECT a, b, SUM(c) AS c FROM test GROUP BY b, c ORDER BY a

Здесь Наверное,
GROUP BY b,a
а не b,c
спасибо, проверю напишу
volter9
Arcoslov
Ну у меня получилось так:
user posted image

Хотя если сгруппировать по a, то на вашем дампе ничего не поменяется:
user posted image

_____________
Мой блог
Arcoslov
volter9,
а если в столбце `с` поставвить все разные значения? здесь просто так совпало в примере, что по `c` группировать, что по `a` - неважно )
volter9
Arcoslov
Ну тогда ORDER BY b, a это то что Вам нужно:
ORDER BY b, a:
user posted image
ORDER BY b, c:
user posted image

Значения:
user posted image

_____________
Мой блог
Arcoslov
volter9, спасибо. Работает, разобрался.
Тут возник ещё ондин вопрос, если можно smile.gif
Как бы в полученном результате выяснить сумму значений столбца `c`, вычисленную группировкой каждого столбца `a` ?

Вот есть наш текущий результат:
a b c
----------
1 a 20
1 b 40
2 a 60
2 b 80

Этот вид таблицы нужно сохранить, но в добавок к нему нужно получить сумму 20+40 а так же 60+80.
В каком виде это можно реализовать?
Kusss
нужно в результате только сумма, или ещё значение каждой строки ?
Arcoslov
Kusss, в результате мы должны получить:
текущий результат в таком виде:
a b c
----------
1 a 20
1 b 40
2 a 60
2 b 80

плюс к этому, сумму значений столбца `c`, полученный группировкой по столбцу `a`.
В каком виде - не знаю, жду ваших предложений,
но текущий результат не должен исчезнуть.
Возможно, как-то добавить четвёртый столбец чтоле..
Kusss
SELECT a, b, SUM( c ) AS c, 
(
SELECT SUM( c ) FROM `test` WHERE a = t1.a GROUP BY a) AS summa
FROM `test` AS t1
GROUP BY b, a
ORDER BY a, b

a b c summa
1 a 100 210
1 b 110 210
2 a 130 360
2 b 230 360
Arcoslov
ништяяк tongue.gif
спасибо!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.