Имя: Пароль:
IT
 
Запрос SQL по подгруппам
0 Андрюха
 
06.01.12
19:40
Есть таблица со следующей структурой: Category, Parent, Goods. Требуется запросом посчитать количество Goods по категориям. Я делаю так:
SELECT category, COUNT(goods) FROM mytable GROUP BY category
Запрос выводит количество goods в каждой конкретной категории, НО категории могут быть вложенными, в этом случае в Parent указывается Category-владелец. Как запросом посчитать количество Goods в Category, с учетом всех вложенных категорий?
1 Grusswelle
 
06.01.12
19:47
SQL какой?
2 szhukov
 
06.01.12
19:48
Если вложенность одноуровневая то так можно

SELECT p.category, COUNT(distinct goods)
FROM mytable p
join mytable c on c.parent=p.category
GROUP BY category
3 ДенисЧ
 
06.01.12
19:48
Циклом в постобработке собрать
4 szhukov
 
06.01.12
19:48
+(2)
GROUP BY p.category
5 Андрюха
 
06.01.12
19:51
(1) MySQL
(2) Не, количество вложенностей м.б. произвольным
(3) Как вариант, но это уж на совсем худой конец
6 ДенисЧ
 
06.01.12
19:52
хм... в мыскле собирать неограниченную иерархию?
К чёрту перья, я должен это видеть!
7 Grusswelle
 
06.01.12
19:55
(0) На MySQL - никак. А вот последние версии MS SQL Server и, если не ошибаюсь, Oracle поддерживают иерархию.

ЗЫ: Иерархия - частный случай классификации.
8 Андрюха
 
06.01.12
19:57
Жаль. Ну тогда всё в таблицу и перебором считать.
9 Андрюха
 
06.01.12
20:41
А на три уровня если?
10 Андрюха
 
07.01.12
05:11
Так взлетит?

SELECT t1.category, (COUNT(t1.goods)+COUNT(t2.goods)+COUNT(t3.goods)) AS allcount
FROM mytable AS t1
LEFT LOIN mytable AS t2 ON t2.parent = t1.category
LEFT LOIN mytable AS t3 ON t3.parent = t2.category
GROUP BY t1.category, t2.category, t3.category