14. april 2006 - 11:34Der er
7 kommentarer og 1 løsning
Problemer med at få korrekt output - Group by SUM
Først vil jeg lige sige at jeg ikke ved om det kan lade sig gøre.. det jeg vil have den til, men det er et forsøg værd
Er igang med en lille søgemaskine og her er det så muligt at at søge på en masse ord. Der er så en check box om det skal være en AND eller OR søgning. AND søgningen er intet problem for der skal den bare tage alt med som den finder. Men når vi kommer til OR, så skal den vægte hits'ene.. lidt som ordered weighted aggregation
Jeg benytte mig af oracle.. men princippet må næsten være det samme
Jeg har : P Table med PID, name, company..
Query - select name, company, 1 as degree from p where name like "søgeord1" and company like "søgeord1" union select name, company, 0.5 as degree from p where name like "søgeord2" and company like "søgeord2" Hvordan laver jeg en ---> "group by SUM of degree"
Jeg får : Name Company Degree Bla Bla 1 Blaa Blaa 1 Hmm Hmm 1 Bla Bla 0.5 Blaa Blaa 0.5
Jeg ønsker : Name Company Degree Bla Bla 1.5 Blaa Blaa 1.5 Hmm Hmm 1
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Med det forbehold, at jeg ikke kender noget til Oracle, så vil jeg tro, at du vil kunne gøre det sådan:
SELECT name, company, SUM(degree) AS degreesum FROM ( select name, company, 1 as degree from p where name like "søgeord1" and company like "søgeord1" union select name, company, 0.5 as degree from p where name like "søgeord2" and company like "søgeord2" ) AS tmp GROUP BY name, company
jeg har prøvet mange forskellige måder.. også uden group by for at se om det ville virke.
AS tmp er også fjernet for at kunne køre :)
FEJL query:
select name, company, sum(degree) as degreesum from (select name, company, 1 as degree from p where name like '%p%' or company like '%p%' union select name, company, 0.5 as degree from p where name like '%Da%' or company like '%Da%');
Eneste godtaget query er den uden "name, company" :
select sum(degree) from (select name, company, 1 as degree from p where name like '%p%' or company like '%p%' union select name, company, 0.5 as degree from p where name like '%Da%' or company like '%Da%');
Husker du - som kjulius skriver - at tilføje 'GROUP BY name, company' ? Det virker med garanti ikke uden...
SELECT name, company, sum(degree) as degreesum FROM (SELECT name, company, 1 as degree FROM p WHERE name like '%p%' OR company like '%p%' UNION SELECT name, company, 0.5 as degree FROM p `WHERE name like '%Da%' OR company like '%Da%' ) GROUP BY name, company;
- og hvis det ikke virker, hvad er så fejlmeddelelsen? "Så brokker den sig", er en anelse upræcist :-)
sørme om ikke det passede.. jeg tror det var fordi jeg fjernede group by, sammen med AS tmp.. og prøvede så group by med name og company alene og det virkede jo så ikke.. men nu virker det og så smider jeg lige en order by degreesum på og så er den ordnet.. fedt nok..
tak for hjælpen
Så der må være en som gerne vil have smidt et par point i nakken.. ved ikke helt hvordan det virker, da jeg er ny herinde :)
Jaa så blev jeg lidt klogere.. fandt også ud af at jeg skulle markere navnet på den man vil acceptere :O)
men det lykkedes og det er hovedsagen ;O)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.