Permalänk
Medlem

Max() I joins - SQL.

Tjenare

Jag är ute efter att joina ihop tre tabeller med varandra

PERSON
KUND
BUD

PERSON
PERSNR (Primärnyckel)
Förnamn
EfterNamn

KUND (Ärver från person)
Kundnr (främmande nyckel från PERSON(PersNr))

BUD
BUDET integer
KUND (Främmande nyckel från KUNDnr)

Hur gör jag för att få ut MaxBudet.
Samtidigt som jag ska ha Ha fram Förnamn efternamn och kundnr

Hoppas ni förstår..

Om något är oklart, Skriv vad som är det och jag ska försöka förklara ytterligare

Visa signatur

Om ni vill ha svar får ni Citera mina inlägg =)

Permalänk
Inaktiv

Tabell uppbyggnaden är lite oklar.

SELECT `person`.`förnamn`, `person`.`efternamn`, `kund`.`kundnr`, MAX(`bud`.`budet`) FROM `person` INNER JOIN `kund` ON `kund`.`kundnr` = `person`.`persnr` INNER JOIN `bud` ON `bud`.`kund` = `kund`.`kundnr`;

Inte testad men något sådant borde funka. Om Kundnr är samma som Persnr förstår jag inte varför du har Kund tabellen?

Permalänk
Medlem
Skrivet av anon150287:

Tabell uppbyggnaden är lite oklar.

SELECT `person`.`förnamn`, `person`.`efternamn`, `kund`.`kundnr`, MAX(`bud`.`budet`) FROM `person` INNER JOIN `kund` ON `kund`.`kundnr` = `person`.`persnr` INNER JOIN `bud` ON `bud`.`kund` = `kund`.`kundnr`;

Inte testad men något sådant borde funka. Om Kundnr är samma som Persnr förstår jag inte varför du har Kund tabellen?

Exakt såhär testade jag också att göra, Vilket leder till detta meddelande :
"Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)"

Jag vet inte hur man använder "Group by" på ett korrekt sätt heller.

angående din fråga om kundTabellen.
Jag har fler tabeller som ärver från Tabellen person.
Jag tog bara med de relevanta tabellerna för just denna fråga

Detta är en bild hur Tabellerna är uppbyggda och en ERR-Modellering:

Visa signatur

Om ni vill ha svar får ni Citera mina inlägg =)

Permalänk
Inaktiv

Testa att lägg till GROUP BY efter SELECT.

Permalänk
Medlem
Skrivet av anon150287:

Testa att lägg till GROUP BY efter SELECT.

Fungerar inte heller:
"Token unknown: Group"

Jag jobbar för övrigt i Interbase / FlameRobin / FireBird

Visa signatur

Om ni vill ha svar får ni Citera mina inlägg =)

Permalänk
Medlem
Skrivet av Vargaas:

Exakt såhär testade jag också att göra, Vilket leder till detta meddelande :
"Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)"

Jag vet inte hur man använder "Group by" på ett korrekt sätt heller.

SELECT `person`.`förnamn`, `person`.`efternamn`, `kund`.`kundnr`, MAX(`bud`.`budet`) FROM `person` INNER JOIN `kund` ON `kund`.`kundnr` = `person`.`persnr` INNER JOIN `bud` ON `bud`.`kund` = `kund`.`kundnr` GROUP BY `person`.`förnamn`, `person`.`efternamn`, `kund`.`kundnr`;

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

SELECT `person`.`förnamn`, `person`.`efternamn`, `kund`.`kundnr`, MAX(`bud`.`budet`) FROM `person` INNER JOIN `kund` ON `kund`.`kundnr` = `person`.`persnr` INNER JOIN `bud` ON `bud`.`kund` = `kund`.`kundnr` GROUP BY `person`.`förnamn`, `person`.`efternamn`, `kund`.`kundnr`;

Fungerar SUPERBRA nu!

Tack för detta!

Visa signatur

Om ni vill ha svar får ni Citera mina inlägg =)

Permalänk
Medlem
Skrivet av jovnas:

SELECT `person`.`förnamn`, `person`.`efternamn`, `kund`.`kundnr`, MAX(`bud`.`budet`) FROM `person` INNER JOIN `kund` ON `kund`.`kundnr` = `person`.`persnr` INNER JOIN `bud` ON `bud`.`kund` = `kund`.`kundnr` GROUP BY `person`.`förnamn`, `person`.`efternamn`, `kund`.`kundnr`;

Det känns omåttligt ologiskt att gruppera på varenda kolumn. Grupperingen ska vara relevant för aggregatfunktionen, dvs MAX i detta fallet.

edit: Följande länk erbjuder intressant läsning!
http://weblogs.sqlteam.com/jeffs/archive/2005/12/14/8546.aspx

Med andra ord något sånt här

SELECT `person`.`förnamn`, `person`.`efternamn`, `kund`.`kundnr`, `grupp`.`maxbud` FROM `person` INNER JOIN `kund` ON `kund`.`kundnr` = `person`.`persnr` INNER JOIN (SELECT `kund`, MAX(`budet`) as `maxbud` FROM `bud` GROUP BY `kund`) `grupp` ON `kund`.`kundnr` = `grupp`.`kund`;

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Det känns omåttligt ologiskt att gruppera på varenda kolumn. Grupperingen ska vara relevant för aggregatfunktionen, dvs MAX i detta fallet.

edit: Följande länk erbjuder intressant läsning!
http://weblogs.sqlteam.com/jeffs/archive/2005/12/14/8546.aspx

har alltid tyckt att det är otroligt ologiskt att göra på "mitt" sätt, men har aldrig haft tid/ork att titta på det, eftersom "det funkar".

länken du tipsar om förklarade det hela väldigt kort och koncist! tack!
från och med nyss ska jag försöka skriva bättre GROUP BY-frågor.

Visa signatur

as far as we can tell, the massacre went well...