Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
asjfklsjaklfj
Member

Откуда:
Сообщений: 12
Прошу вас помочь обуздать этого дикого мустанга :-) ORA-00979: not a GROUP BY expression

select tot.n, tot.ptv
from	
(select pn.name n,
		pdb.name bn,
        pdb.id bid,
        pdbpt.name ptn,
        pdbpt.id ptid,
        pdbpt.part_value ptv
from pd_animal pn 
inner join pd_brblood pdbr
on pn.id = pdbr.pd_animal_id
inner join pd_breed pdb
on pdbr.pd_breed_id = pdb.id
inner join pd_bloodpt pdbpt
on pdbr.pd_bloodpt_id = pdbpt.id
where pn.id = (
select mother_code mk
from pd_animal pn1
where pn1.id = '1.1002.59')
union all
select pn.name n,
		pdb.name bn,
        pdb.id bid,
        pdbpt.name ptn,
        pdbpt.id ptid,
        pdbpt.part_value ptv
from pd_animal pn 
inner join pd_brblood pdbr
on pn.id = pdbr.pd_animal_id
inner join pd_breed pdb
on pdbr.pd_breed_id = pdb.id
inner join pd_bloodpt pdbpt
on pdbr.pd_bloodpt_id = pdbpt.id
where pn.id = (
select father_code fk
from pd_animal pn1
where pn1.id = '1.1002.59')) tot
group by tot.ptv
6 мар 14, 10:46    [15681036]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
-2-
Member

Откуда:
Сообщений: 15330
Да шли бы все в жопу со своими синтаксическими проблемами.
6 мар 14, 10:52    [15681070]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
rockclimber
Member

Откуда: у меня в голове опилки?
Сообщений: 11085
asjfklsjaklfj, для каждого запроса и подзапроса с агрегатными функциями скопируйте все, что стоит в разделе select, в раздел group by.
6 мар 14, 11:07    [15681201]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54381
rockclimber
asjfklsjaklfj, для каждого запроса и подзапроса с агрегатными функциями скопируйте все, что стоит в разделе select, в раздел group by.
особенно sum, max и прочие avg
)
6 мар 14, 11:21    [15681275]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
Gustly
Member

Откуда:
Сообщений: 1426
rockclimber
asjfklsjaklfj, для каждого запроса и подзапроса с агрегатными функциями скопируйте все, что стоит в разделе select, в раздел group by.

Кроме синонимов.
6 мар 14, 11:21    [15681277]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
asjfklsjaklfj
Member

Откуда:
Сообщений: 12
rockclimber,
ваш вариант работает, но это не то, что нужно.
нужно суммировать данные в поле TPTV если значения строк в поле TBID совпадают

TBID TPTID TPTV
1.1007.16 1.1009.8 50
1.1007.15 1.1009.10 12,5
1.1007.18 1.1009.9 25
1.1007.19 1.1009.8 50
1.1007.16 1.1009.9 25
6 мар 14, 11:34    [15681358]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
123йй
Member

Откуда:
Сообщений: 1637
asjfklsjaklfj,

а теперь раскажите как из
select tot.n, tot.ptv

получилось 3 поля ну соотвественно смотрим 15681275
6 мар 14, 11:36    [15681376]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
asjfklsjaklfj
Member

Откуда:
Сообщений: 12
rockclimber,


TBID TPTID TPTV
1.1007.16 -|- 1.1009.8 -|- 50
1.1007.15 -|- 1.1009.10 -|- 12,5
1.1007.18 -|- 1.1009.9 -|- 25
1.1007.19 -|- 1.1009.8 -|- 50
1.1007.16 -|- 1.1009.9 -|- 25
6 мар 14, 11:40    [15681395]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
asjfklsjaklfj
Member

Откуда:
Сообщений: 12
123йй,

ну вот так:

select tot.bid tbid,
tot.ptid tptid,
tot.ptv tptv
from
(select pn.name n,
pdb.name bn,
pdb.id bid,
pdbpt.name ptn,
pdbpt.id ptid,
pdbpt.part_value ptv
from pd_animal pn
inner join pd_brblood pdbr
on pn.id = pdbr.pd_animal_id
inner join pd_breed pdb
on pdbr.pd_breed_id = pdb.id
inner join pd_bloodpt pdbpt
on pdbr.pd_bloodpt_id = pdbpt.id
where pn.id = (
select mother_code mk
from pd_animal pn1
where pn1.id = '1.1002.59')
union all
select pn.name n,
pdb.name bn,
pdb.id bid,
pdbpt.name ptn,
pdbpt.id ptid,
pdbpt.part_value ptv
from pd_animal pn
inner join pd_brblood pdbr
on pn.id = pdbr.pd_animal_id
inner join pd_breed pdb
on pdbr.pd_breed_id = pdb.id
inner join pd_bloodpt pdbpt
on pdbr.pd_bloodpt_id = pdbpt.id
where pn.id = (
select father_code fk
from pd_animal pn1
where pn1.id = '1.1002.59')) tot
6 мар 14, 11:43    [15681414]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
asjfklsjaklfj
Member

Откуда:
Сообщений: 12
asjfklsjaklfj,

select  tot.bid tbid,
		tot.ptid tptid,
        tot.ptv tptv
from	
(select pn.name n,
		pdb.name bn,
        pdb.id bid,
        pdbpt.name ptn,
        pdbpt.id ptid,
        pdbpt.part_value ptv
from pd_animal pn 
inner join pd_brblood pdbr
on pn.id = pdbr.pd_animal_id
inner join pd_breed pdb
on pdbr.pd_breed_id = pdb.id
inner join pd_bloodpt pdbpt
on pdbr.pd_bloodpt_id = pdbpt.id
where pn.id = (
select mother_code mk
from pd_animal pn1
where pn1.id = '1.1002.59')
union all
select pn.name n,
		pdb.name bn,
        pdb.id bid,
        pdbpt.name ptn,
        pdbpt.id ptid,
        pdbpt.part_value ptv
from pd_animal pn 
inner join pd_brblood pdbr
on pn.id = pdbr.pd_animal_id
inner join pd_breed pdb
on pdbr.pd_breed_id = pdb.id
inner join pd_bloodpt pdbpt
on pdbr.pd_bloodpt_id = pdbpt.id
where pn.id = (
select father_code fk
from pd_animal pn1
where pn1.id = '1.1002.59')) tot
6 мар 14, 11:48    [15681454]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
123йй
Member

Откуда:
Сообщений: 1637
asjfklsjaklfj,

автор
rockclimber,
ваш вариант работает, но это не то, что нужно.
поэтому принял решение выкинуть group by нафиг и был удивлен результатом
создаем новую тему т.к текущая не соотвествует вопросу
автор
нужно суммировать данные в поле TPTV если значения строк в поле TBID совпадают
6 мар 14, 11:56    [15681528]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
rockclimber
Member

Откуда: у меня в голове опилки?
Сообщений: 11085
andreymx, Gustly, блин, я это все на автомате убираю, даже в голову не пришло про это писать
6 мар 14, 12:04    [15681607]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
asjfklsjaklfj
Member

Откуда:
Сообщений: 12
Вот так работает.
Вопрос как показать остальные поля, которые были во вложенном подзапросе.
select  tot.bid tbid,
        sum (tot.ptv) tptv
from	
(select pn.name n,
		pdb.name bn,
        pdb.id bid,
        pdbpt.name ptn,
        pdbpt.id ptid,
        pdbpt.part_value ptv
from pd_animal pn 
inner join pd_brblood pdbr
on pn.id = pdbr.pd_animal_id
inner join pd_breed pdb
on pdbr.pd_breed_id = pdb.id
inner join pd_bloodpt pdbpt
on pdbr.pd_bloodpt_id = pdbpt.id
where pn.id = (
select mother_code mk
from pd_animal pn1
where pn1.id = '1.1002.59')
union all
select pn.name n,
		pdb.name bn,
        pdb.id bid,
        pdbpt.name ptn,
        pdbpt.id ptid,
        pdbpt.part_value ptv
from pd_animal pn 
inner join pd_brblood pdbr
on pn.id = pdbr.pd_animal_id
inner join pd_breed pdb
on pdbr.pd_breed_id = pdb.id
inner join pd_bloodpt pdbpt
on pdbr.pd_bloodpt_id = pdbpt.id
where pn.id = (
select father_code fk
from pd_animal pn1
where pn1.id = '1.1002.59')) tot
group by tot.bid
6 мар 14, 12:18    [15681740]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
asjfklsjaklfj
Member

Откуда:
Сообщений: 12
Возвращает то, что нужно, но мне нужны и поля из подзапроса с полуением аналогичного результата.
TBID -|- TPTV
1.1007.18 -|- 25
1.1007.15 -|- 12,5
1.1007.16 -|- 75
1.1007.19 -|- 50
6 мар 14, 12:23    [15681794]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
rockclimber
Member

Откуда: у меня в голове опилки?
Сообщений: 11085
asjfklsjaklfj
Вопрос как показать остальные поля, которые были во вложенном подзапросе.
Перечислить их названия или алиасы во внешнем, добавив при необходимости в group by внешнего запроса.
6 мар 14, 12:24    [15681804]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
asjfklsjaklfj
Member

Откуда:
Сообщений: 12
rockclimber,
тогда получим это

TBID TPTID TPTV
1.1007.16 -|- 1.1009.8 -|- 50
1.1007.15 -|- 1.1009.10 -|- 12,5
1.1007.18 -|- 1.1009.9 -|- 25
1.1007.19 -|- 1.1009.8 -|- 50
1.1007.16 -|- 1.1009.9 -|- 25
6 мар 14, 12:26    [15681827]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
asjfklsjaklfj
Member

Откуда:
Сообщений: 12
asjfklsjaklfj,
то есть строк не суммируется.
6 мар 14, 12:27    [15681844]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
rockclimber
Member

Откуда: у меня в голове опилки?
Сообщений: 11085
asjfklsjaklfj, оформляй данные так:

TBIDTPTIDTPTV
1.1007.161.1009.850
1.1007.151.1009.1012.5
1.1007.181.1009.925
1.1007.191.1009.850
1.1007.161.1009.925
6 мар 14, 12:30    [15681867]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
rockclimber
Member

Откуда: у меня в голове опилки?
Сообщений: 11085
asjfklsjaklfj
asjfklsjaklfj,
то есть строк не суммируется.
Логично, ведь одному значению TBID соответствуют два разных значения TPTID. Добавляешь еще одно поле - получаешь другой результат. Покажи, какой ответ хочешь увидеть.
6 мар 14, 12:32    [15681888]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
asjfklsjaklfj
Member

Откуда:
Сообщений: 12
rockclimber,
Хотелось бы вот так, например:
TBID TPTID TPTV
1.1007.16 1.1009.8 75
1.1007.15 1.1009.10 12.5
1.1007.18 1.1009.9 25
1.1007.19 1.1009.8 50
6 мар 14, 12:58    [15682095]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
rockclimber
Member

Откуда: у меня в голове опилки?
Сообщений: 11085
select  tot.bid tbid, tot.ptid,
        sum (tot.ptv) over (partition by tot.bid) tptv
  from (...) tot
6 мар 14, 13:11    [15682222]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
asjfklsjaklfj
Member

Откуда:
Сообщений: 12
rockclimber,
Спасибо, почти то, что надо:

TBID TPTID SUM(TOT.PTV)OVER(PARTITIONBYTOT.BID)
1.1007.15 1.1009.10 12.5
1.1007.16 1.1009.8 75
1.1007.16 1.1009.9 75
1.1007.18 1.1009.9 25
1.1007.19 1.1009.8 50


остается убрать одну строку 1.1007.16, блин а если таких суммируемых строчек будет на две а десять, то получится потом удалять 9 из 10 надо будет.
6 мар 14, 14:14    [15682744]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
rockclimber
Member

Откуда: у меня в голове опилки?
Сообщений: 11085
select tt.tbid, tt.ptid, tt.tptv
  from (select tot.bid tbid, tot.ptid,
               sum (tot.ptv) over (partition by tot.bid) tptv,
               row_number() over (partition by tot.bid order by tot.ptid) rn
          from (...) tot
         ) tt
 where tt.rn = 1
+
Рекомендую вам убедиться, что вы точно представляете, почему вам нужны именно такие данные, какие вы просите. Иначе - готовьте вазелин, начальство будет недовольно
6 мар 14, 14:21    [15682816]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
asjfklsjaklfj
Member

Откуда:
Сообщений: 12
rockclimber,

Вот это спасибо огромаднейшее!!!

TBID TPTID TTBID
1.1007.15 1.1009.10 12.5
1.1007.16 1.1009.8 75
1.1007.18 1.1009.9 25
1.1007.19 1.1009.8 50


Но все же сложно как то, такие финты приходится делать чтобы суммировать значения одного столбца по другому. Неужели оракловцы ни чего более адекватного не придумали???
Вот например, MySQL:

CREATE TABLE `test` (
  `TBID` varchar(20) DEFAULT NULL,
  `TPTID` varchar(20) DEFAULT NULL,
  `TTBID` double(15,3) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 PACK_KEYS=0;


INSERT INTO `test` (`TBID`, `TPTID`, `TTBID`) VALUES   
  ('1.1007.15', '1.1009.10', 12.5),
  ('1.1007.16', '1.1009.8', 25),
  ('1.1007.16', '1.1009.9', 50),
  ('1.1007.18', '1.1009.9', 25),
  ('1.1007.19', '1.1009.8', 50);


select tbid, tptid, sum(ttbid)
from `test`
group by tbid


тынц

TBID,	TPTID, TTBID
1.1007.15,	1.1009.10,	12,5
1.1007.16,	1.1009.8,	75
1.1007.18,	1.1009.9,	25
1.1007.19,	1.1009.8,	50


И все :-)

Есть ли в оракле более элегантный способ чтобы суммировать значения одного столбца по значению другого, если в если в результирующем наборе нужно иметь еще другие поля.

Наверное их оракловцев была примерно такая: "зачем в результирующем наборе иметь поля, значения которых могут быть потеряны..."
Ну что ж это логично... Наверное действительно можно обойтись таким набором, но нужно кое, что пересмотреть в своем коде.

Спасибо огромное всем, кто принял участие в обсуждении этой проблемы ;-)

Особая благодарность пользователю "rockclimber"
6 мар 14, 16:11    [15683855]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с разобраться с запросом ORA-00979: not a GROUP BY expression  [new]
rockclimber
Member

Откуда: у меня в голове опилки?
Сообщений: 11085
asjfklsjaklfj
Вот например, MySQL:
Фейспалм точка джипег. Что, реально так работает?

Если я вдруг забуду (хотя такое забыть трудно), напомните, чтобы я не пользовался MySQL никогда и ни при каких обстоятельствах.
6 мар 14, 16:17    [15683890]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить