10.02.2009 17:30
Pyatak
 
Ниже приведен пример простого запроса, который получает, допустим, среднюю цену товара по каждой подгруппе. Как сделать тоже самое, только с группировкой по старшим группам?
Код:
SELECT cc.tree AS "Подгруппа",
       AVG(p.price) AS "Цена"
       
  FROM supermag.smcard c,
       supermag.sacardclass cc,
       supermag.smprices p

 WHERE c.idclass = cc.id
   AND p.article = c.article
   AND c.accepted = 1

GROUP BY cc.tree
10.02.2009 17:52
Vlad
 
Код:
' select a.id,'+
               ' a.tree,'+
	             ' a.prtree,'+
	             ' nvl(p.id,0) pr_id,'+
	             ' a.tree ||chr(32)|| a.name as name,'+
               ' a.put_n'+
        ' from'+
        ' (select id,'+
                ' replace(tree,chr(35)) tree,'+
	              ' nvl(rtrim(rtrim(tree,'+''''+'.'+''''+'),'+''''+'1234567890'+''''+'),'+''''+'#'+''''+') prtree,'+
	              ' name,'+
                ' to_number(replace((replace(tree,chr(46))),chr(35),chr(48))) put_n'+
        ' from sasupplierclass) a,'+
             ' sasupplierclass p'+
             ' where a.prtree=p.tree'+
         ' order by a.put_n';
где a.ptree - путь родителя группы a.tree
а pr_id ИД родителя группы a.id
10.02.2009 17:55
Mtirt
 
Код:
 SELECT substr(cc.tree,1,instr(cc.tree, '.',1)-1) AS "Группа",
       AVG(p.price) AS "Цена"
       
  FROM supermag.smcard c,
       supermag.sacardclass cc,
       supermag.smprices p

 WHERE c.idclass = cc.id
   AND p.article = c.article
   AND c.accepted = 1

GROUP BY substr(cc.tree,1,instr(cc.tree, '.',1)-1)
11.02.2009 10:54
Pyatak
 
Спасибо вам. Так как вариант Mtirt попроще, попробовал его, работает :)
17.02.2009 17:41
deucel
 
Цитата:
Pyatak Так как вариант Mtirt попроще, попробовал его, работает :)
До кучи, пример с СМ пакетом.

Код:
SELECT   classifier.gettitlebypath (classifier.gettreeprefix (cc.tree, 0), 'SACARDCLASS') "Группа", ROUND (AVG (p.price), 2) "Цена"
    FROM supermag.smcard c, supermag.svaartclassif cc, supermag.smprices p
   WHERE c.article = cc.article AND p.article = c.article AND c.accepted = 1
GROUP BY classifier.gettreeprefix (cc.tree, 0)
если не нужен c.accepted = 1 или вынесено в отдельную группу, то можно и supermag.smcard c выкинуть.
Часовой пояс GMT +3, время: 12:10.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.