Avatar billede jakobdo Ekspert
12. september 2013 - 22:58 Der er 6 kommentarer og
1 løsning

Gruppere og efterbehandle resultat fra database

Hej,
jeg skal forsøge at lave en group by / sum på et resultat af et udtræk, som allerede indeholder GROUP BY og SUM osv...

For at forsimple mit problem, så har jeg en database med ordrelinjer og produkter.

Og en ordrelinje peger altid på et produkt.

et produkt har så den twist, at den kan have et "produkt_id" ala:

produktid-variant

Så faktisk kan der være 2 produkter, med id:

produkt1-stor
produkt1-lille

Og disse kan have forskellig pris osv...
Men det jeg så ønsker, at at finde salgspris på produkterne.

Er der f.eks. solgt 2 af produkt1-lille, giver det:

produkt1-stor.pris x 2 = EN PRIS
produkt1-lille.pris x 3 = EN PRIS

Og herefter, skal jeg så lave en gruppering på produktID.

Så jeg får samlet salgspris pr "produktid", som jo er: lille + stor

Hvordan opnår jeg det?

Og giver dette overhovedet mening?
Avatar billede arne_v Ekspert
12. september 2013 - 23:07 #1
Baseret paa din indledning (ikke eksmeplet) taenker jeg paa noget a la:

SELECT x.a,SUM(x.b)
FROM (SELECT t.a AS a, SUM(t.b) AS b FROM t GROUP BY t.a) x
GROUP BY x.a
Avatar billede jakobdo Ekspert
13. september 2013 - 08:48 #2
Jeg overvejede at skrive: Arne_V: Hjælp mig. Men jeg fik jo nok ret. :o)
Tester det senere og vender retur.
Avatar billede jakobdo Ekspert
13. september 2013 - 21:48 #3
Hej Arne,
jeg har denne sql i dag.
Den giver mig "korrekt" udtræk.

SELECT p.short_description, ol.id, p.shop_id, p.name, (p.price_dk * 1.25) as price, p.quantity, SUM( ol.quantity ) as antal, SUM( ol.quantity * ol.price * 1.25) as oms FROM orders_orderline ol INNER JOIN products_product p ON ol.product_id = p.id INNER JOIN orders_order o ON ol.order_id = o.id %s GROUP BY ol.product_id ORDER BY oms DESC

Men jeg skal tilføje følgende:

substring_index(shop_id, "-",1) AS newGroup

Og så skal ovenstående resultat grupperes og hver "gruppe" skal så have antal, quantity og oms summeret.
Avatar billede jakobdo Ekspert
13. september 2013 - 21:59 #4
Arne: Jeg tror sgu denne gør det:

SELECT x.newGroup,SUM(x.lager), SUM(x.antal), SUM(x.oms)
FROM (SELECT ol.id, substring_index(shop_id, "-",1) AS newGroup, p.quantity as lager, SUM( ol.quantity ) as antal, SUM( ol.quantity * ol.price * 1.25) as oms FROM orders_orderline ol INNER JOIN products_product p ON ol.product_id = p.id INNER JOIN orders_order o ON ol.order_id = o.id WHERE `o`.`order_currency` = 'DKK' AND `o`.`order_status` IN ('SH', 'CR') GROUP BY ol.product_id ORDER BY oms DESC) x
GROUP BY x.newGroup
Avatar billede jakobdo Ekspert
13. september 2013 - 21:59 #5
Smid et svar Arne_V
Avatar billede arne_v Ekspert
14. september 2013 - 03:17 #6
ok
Avatar billede jakobdo Ekspert
15. september 2013 - 10:24 #7
Tak for hjælpen Arne. Jeg har rodet lidt med mongo og der kan man netop bruge deres aggregation framework, hvor man tager et resultat og piper det videre og videre. Vidste ikke man kunne det samme i mysql. Men så blev jeg da så klog. Det giver jo uanede muligheder, som jeg tidligere har måtte løse kodemæssigt.
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



IT-JOB

Billetkontoret A/S

.NET Full Stack Developer

De Nationale Geologiske Undersøgelser for Danmark og Grønland (GEUS)

IT-systemadministrator søges til GEUS

Cognizant Technology Solutions Denmark ApS

Service Line Specialist - ServiceNow (Thirdera)