Avatar billede Slettet bruger
23. juli 2008 - 12:27 Der er 4 kommentarer og
1 løsning

Left join samt sum

Hej

Jeg har følgende query med 2x left join (og den virker fint :)):

SELECT b.id AS basket_id, b.x AS basket_x, b.y AS basket_y, b.price AS basket_price, b.amount AS basket_amount, b.text AS basket_text, p.id AS product_id, p.price_number AS product_price_number, p.name AS product_name, p.description AS product_description, p.memo AS product_memo, p.picture AS product_picture, c.id AS category_id, c.name AS category_name, c.description AS category_description FROM ((basket_added b LEFT JOIN products p ON b.product = p.id) LEFT JOIN products_categories c ON p.category = c.id) where session_id = "&strCookie&";

Mit spørgsmål er således, om det er muligt at jeg i samme query kan udregne summen af andre tabeller?!?

Fx har jeg en tabel der hedder "basket_addons" hvori "basket_id" indgår samt "price". Der kan optræde flere linier i "basket_addons" og det ville være lækkert hvis ovenstående query kunne tage summen af price hvor alle "basket_id" er ens. Er dette muligt?!?
Avatar billede Slettet bruger
23. juli 2008 - 13:17 #1
Hej igen...

Jeg har arbejdet lidt videre på den, men den giver nogle problemer for nu ligges alle sumtallene sammen:

SELECT b.id AS basket_id, b.x AS basket_x, b.y AS basket_y, b.price AS basket_price, b.amount AS basket_amount, b.text AS basket_text, p.id AS product_id, p.price_number AS product_price_number, p.name AS product_name, p.description AS product_description, p.memo AS product_memo, p.picture AS product_picture, c.id AS category_id, c.name AS category_name, c.description AS category_description, SUM( ba.price ) AS basket_addons_sum, SUM( bc.price ) AS basket_colours_sum, SUM( bg.price ) AS basket_glas_sum
FROM (
(
(
(
(
basket_added b
LEFT JOIN products p ON b.product = p.id
)
LEFT JOIN products_categories c ON p.category = c.id
)
LEFT JOIN basket_addons ba ON b.id = ba.basket_id
)
LEFT JOIN basket_colours bc ON b.id = bc.basket_id
)
LEFT JOIN basket_glas bg ON b.id = bg.basket_id
)
WHERE b.session_id =9612
GROUP BY b.id;
Avatar billede Slettet bruger
23. juli 2008 - 14:15 #2
Korrektion: Det er selvfølgelig ikke sumtallene den ligger sammen på tværs af hinanden, men derimod bliver der summeret det antal gange hver linie vises.
Avatar billede kjulius Novice
23. juli 2008 - 19:32 #3
Du kan tilføje outer eller inner join til en inline forespørgsel, f.eks.

LEFT JOIN (
  SELECT basket_id, SUM(price) AS prissum
  FROM basket_addons
  GROUP BY basket_id) AS bao ON bao.basket_id = b.id

og så tilføje feltet bao.prissum til din SELECT øverst
Avatar billede Slettet bruger
24. juli 2008 - 08:45 #4
Hej kjulius

Det er jo helt perfekt, den virker bare... Har været søvnløs hele natten over denne query og havde lidt i tankerne at der nok skulle en subselect på, men kunne ikke lige overskue den men det er helt perfekt at du kom med svaret :)

Resultatet blevet som følger:

SELECT b.id AS basket_id, b.x AS basket_x, b.y AS basket_y, b.price AS basket_price, b.amount AS basket_amount, b.text AS basket_text, p.id AS product_id, p.price_number AS product_price_number, p.name AS product_name, p.description AS product_description, p.memo AS product_memo, p.picture AS product_picture, c.id AS category_id, c.name AS category_name, c.description AS category_description, ba.basket_addons_sum, bc.basket_colours_sum, bg.basket_glas_sum  FROM (
(
(
(
(
  basket_added b LEFT JOIN products p ON b.product = p.id)
  LEFT JOIN products_categories c ON p.category = c.id) LEFT JOIN (
  SELECT basket_id, SUM(price) AS basket_addons_sum
  FROM basket_addons
  GROUP BY basket_id) AS ba ON ba.basket_id = b.id) LEFT JOIN (
  SELECT basket_id, SUM(price) AS basket_colours_sum
  FROM basket_colours
  GROUP BY basket_id) AS bc ON bc.basket_id = b.id) LEFT JOIN (
  SELECT basket_id, SUM(price) AS basket_glas_sum
  FROM basket_glas
  GROUP BY basket_id) AS bg ON bg.basket_id = b.id) where b.session_id = 9612 GROUP BY b.id;

Men du må meget gerne lave et svar, så jeg kan acceptere det :)
Avatar billede kjulius Novice
24. juli 2008 - 19:34 #5
Det er da noget kedeligt noget at du skulle ligge søvnløs over sådan en forespørgsel. Ærgerligt, at du ikke så mit svar før du gik i seng. :-)
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