Avatar billede ostekage Nybegynder
29. november 2002 - 14:43 Der er 8 kommentarer og
1 løsning

group giver en sql fejl

Hi alle
Jeg sidder og sysler med en postgreSQL-database, men jeg kan ikke få den til at group'e
(fungerer tilsyneladende ikke som mysql) min query er:
SELECT accounts.id,contact_info.name,contact_info.last_name,contact_info.company,contact_info.address1,contact_info.address2,contact_info.city,contact_info.state,contact_info.postal_code,contact_info.country,bill.id,bill.start_balance,bill.end_balance,bill.amount FROM accounts,contact_info,bill WHERE bill.account_id=accounts.id AND contact_info.id=accounts.ci_id AND accounts.bi_id > 0 AND accounts.failed=NULL GROUP BY accounts.id, ORDER BY accounts.id

men den giver flg. fejl besked:
query failed: ERROR: Attribute contact_info.name must be GROUPed or used in an aggregate function

fjerner jeg group'en virker det, men ikke grupperet..

På forhånd tak..
Avatar billede erikjacobsen Ekspert
29. november 2002 - 14:46 #1
Når du laver en group by på en attribut som accounts.id
så "samler" den jo alle poster med samme id.
Derfor kan den ikke vide hvilken værdi den skal
tage for de andre felter, der jo kan være forskellige.

Med nu står der "id" - så er det sikkert en nøgle,
og så mener du garanteret ikke GROUP BY.

Hvad skal du have regnet ud?
Avatar billede erikjacobsen Ekspert
29. november 2002 - 14:54 #2
Og PS: Ja, du har ret. Mysql er anderledes har
du fx

  felta  feltb
  1    Erik
  2    Kurt

og siger

  select felta,feltb from tabellen group by felta

så får du enten

  1    Erik

eller

  1    Kurt

men du kan principielt ikke vide hvilken, og dermed
er det egentlig en skør forespørgsel. Er du interesseret
i bare én af dem, ligegyldigt hvilken, kan du

  select felta,max(feltb) from tabellen group by felta
Avatar billede erikjacobsen Ekspert
29. november 2002 - 14:55 #3
felta  feltb
  1    Erik
  1    Kurt

...skulle det nok have været
Avatar billede ostekage Nybegynder
29. november 2002 - 15:01 #4
ja, det er ligegyldigt hvilken en af dem, det virker bare åndsvagt at programmere sig ud af det når postgrSQL kan klare det, med en group..
Avatar billede erikjacobsen Ekspert
29. november 2002 - 15:04 #5
så bruger du bare max

men måske er det ikke en rimelig måde at dine tabeller
er struktureret på ... men det kan vel være ligemeget
Avatar billede ostekage Nybegynder
29. november 2002 - 15:25 #6
ehm, sorry jeg er ikke helt med, hvor skal jeg så sätte det max ind?

Ja jeg ved det virker lidt dumt, men sådan ser den altså ud..
Avatar billede erikjacobsen Ekspert
29. november 2002 - 16:49 #7
NOget i retning af

SELECT accounts.id,max(contact_info.name) as name, ... osv
Avatar billede ostekage Nybegynder
02. december 2002 - 12:09 #8
Jeg lavede query'en med en join, - det gav det önskede resultat, lukker..
Avatar billede ostekage Nybegynder
02. december 2002 - 12:09 #9
slut
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester