Ich versuche, einen Prozentsatz der Artikel-ID zu erhalten, die in einem bestimmten Bereich verfügbar sind. Mit meiner Anfrage, bekomme ich einen Fehler ORA-00937: not a single-group group function
Wie löst man ORA-00937: keine Gruppenfunktion für eine einzelne Gruppe bei der Berechnung des Prozentsatzes?
Alle Details:
Ich habe diese beiden Tabellen:
ALLITEMS
---------------
ItemId | Areas
---------------
1 | EAST
2 | EAST
3 | SOUTH
4 | WEST
CURRENTITEMS
---------------
ItemId
---------------
1
2
3
und dieses Ergebnis wollen:
---------------
Areas| Percentage
---------------
EAST | 50 --because ItemId 1 and 2 are in currentitems, so 2 items divided by the total 4 in allitems = .5
SOUTH | 25 --because there is 1 item in currentitems table that are in area SOUTH (so 1/4=.25)
WEST | 0 --because there are no items in currentitems that are in area WEST
Die DDL:
drop table allitems;
drop table currentitems;
Create Table Allitems(ItemId Int,areas Varchar2(20));
Create Table Currentitems(ItemId Int);
Insert Into Allitems(Itemid,Areas) Values(1,'east');
Insert Into Allitems(ItemId,areas) Values(2,'east');
insert into allitems(ItemId,areas) values(3,'south');
insert into allitems(ItemId,areas) values(4,'east');
Insert Into Currentitems(ItemId) Values(1);
Insert Into Currentitems(ItemId) Values(2);
Insert Into Currentitems(ItemId) Values(3);
Meine Suche:
Select
areas,
(
Select
Count(Currentitems.ItemId)*100/(Select Count(ItemId) From allitems inner_allitems Where inner_allitems.areas = outer_allitems.areas)
From
Allitems Inner_Allitems Left Join Currentitems On (Currentitems.Itemid = Inner_Allitems.Itemid)
Where inner_allitems.areas = outer_allitems.areas
***group by inner_allitems.areas***
***it worked by adding the above group by***
) "Percentage Result"
From
allitems outer_allitems
Group By
areas
Der Fehler:
Error at Command Line:81 Column:41 (which is the part `(Select Count(ItemId) From allitems inner_allitems Where inner_allitems.areas = outer_allitems.areas)`)
Error report:
SQL Error: ORA-00937: not a single-group group function
Wenn ich genau die gleiche Abfrage in SQL Server ausführen, funktioniert es gut. Wie behebe ich das in Oracle?
Danke für die tollen Antworten. Verschiedene Möglichkeiten, es zu tun! Vielen Dank. Ich fand auch, dass es funktioniert, wenn Sie eine Gruppe hinzufügen (die Frage bearbeitet, in Meine Abfrage nach "***" gesucht). – Liao