|
Запрос 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
|
|