Toon posts:

[SQL]Procentuele stijging berekenen

Pagina: 1
Acties:
  • 150 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben bezig met een opdracht voor school. Daarbij moet ik een systeem maken waarmee die procentuele stijging van de omzet per periode berekend kan worden.

Dit zijn de tabellen:
code:
1
2
3
4
5
6
7
8
factuur         
    factuurnr   datum       
    1       1-1-2004        
    2       10-1-2004       
    3       15-1-2004       
    4       5-2-2004        
    5       10-2-2004       
    6       15-2-2004


code:
1
2
3
4
5
6
7
8
9
10
11
12
    factuurregels           
    factuurregels           
    regelnr factuurnr aantal prijs
    1       1       2       5
    1       2       1       6
    2       2       2       5   
    3       2       3       3
    1       3       1       5
    1       4       3       7
    1       5       4       5
    2       5       1       3
    1       6       2       2



Waarbij januari = periode 1
en februari = periode 2

Zelf kwam ik zover:

code:
1
2
3
4
select month(datum) as periode, sum(aantal * prijs) AS omzet 
from factuur, factuurregels 
where factuur.factuurnr = factuurregels.factuurnr 
group by periode


wat deze uitkomst geeft:

code:
1
2
3
periode omzet 
1            40 
2            48


Maar nu moet ik de procentuele stijging nog berekenen tussen de 2 periodes zonder gebruik te maken van bijv. PHP. Bovendien moet het script voor meer periodes bruikbaar zijn. Wie kan me helpen?

Bij voorbaat dank!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Werkt dit niet gewoon:
SQL:
1
2
select (select omzet from #temp where periode = 2) / 
       (select omzet from #temp where periode = 1) * 100;
:?

Met daarbij dus even ervan uitgaande dat je een SELECT INTO oid doet van je eigen query naar een temptabel en zo :)

Professionele website nodig?


  • Swa-baldie
  • Registratie: Juni 2002
  • Laatst online: 19-06-2023
Opdracht voor school zei je...? Misschien eerst eens even iets anders lezen?
Welkom in P&W: FAQ en Beleid *updated: 26-01*

modbreak: lees 'm zelf eerst even door, er staat namelijk in dat huiswerkvragen geen probleeem zijn indien duidelijk is dat je zelf voldoende voorwerk hebt verricht en niet gewoon voor een quick-fix langskomt. Gebruik daarnaast aub een topic report als je ergens een probleem mee hebt

[ Voor 54% gewijzigd door whoami op 16-03-2004 12:27 ]


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dat kan vrij eenvoudig met 1 query geloof ik, moet ie zo'n soort structuur hebben:

SELECT code voor stijging tov vorige periode FROM (jouw periode-query als subquery) AS omzet_nieuw, (jouw periode-query als subquery) AS omzet_oud WHERE omzet_nieuw.periode = (omzet_oud.periode + 1)

Ik weet niet of het eenvoudiger kan dan dat :P

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 14-05 15:52
Het kan ook zonder subqueries
code:
1
2
3
4
5
6
7
8
9
10
SELECT  1 as groepeer, 
    sum(if(month(datum)=2,(aantal*prijs),0)) as dezemaand,
    sum(if(month(datum)=1,(aantal*prijs),0)) as vorigemaand, 
    sum(if(month(datum)=2,(aantal*prijs),0))/sum(if(month(datum)=1,(aantal*prijs),0))*100 as stijging
FROM 
    factuur, factuurregels
WHERE
    factuur.factuurnr = factuurregels.factuurnr AND
    (month(datum)=2 || month(datum)=1) 
GROUP by groepeer


Je moet dus de twee maanden die je wilt vergelijken opgeven. (let er daarbij op dat je straks misschien ook wel 2 jaren in je db hebt, en je dus ook het jaar moet gaan opgeven.

Verwijderd

Topicstarter
ok thanks voor de reacties! ik ben een beetje aan het puzzelen geweest met de aangeven oplossing en ben tot dit gekomen:

code:
1
2
3
SELECT omzet.omzet, omzet2.omzet, ((omzet2.omzet-omzet.omzet)/omzet.omzet)*100 AS verschil
FROM omzet, omzet AS omzet2
WHERE (((omzet.periode)=omzet2.periode+1));


Dat werkt prima in combinatie met de vorige query! Thanks voor de tips!

Verwijderd

Topicstarter
die van beetle71 is ook erg goed. Alleen hij geeft nu een stijging van 120. Terwijl het juist een daling is van 20 procent.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 16 maart 2004 @ 12:32:
die van beetle71 is ook erg goed. Alleen hij geeft nu een stijging van 120. Terwijl het juist een daling is van 20 procent.
code:
1
2
3
periode omzet 
1            40 
2            48
Erhm :? dit is toch een stijging van 20 % :?

[ Voor 9% gewijzigd door gorgi_19 op 16-03-2004 12:35 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
ja sorry inderdaad :D maar bovendien is de query van beetle maar voor deze periodes. als ik namelijk een derde periode toevoeg dan moet ik ook het verschil weten tussen 2 en 3 etc.

Verwijderd

Volgens mij kom je hier mee verder

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
select
  vorige_periode.periode
 ,huidige_periode.periode
  vorige_periode.omzet
 ,huidige_periode.omzet
 , (huidige_periode.omzet - vorige_periode.omzet)
  / vorige_periode.omzet * 100
from
  ( select SUM( aantal * prijs ) as omzet
    from       factuur f
    inner join factuurregels fr on f.factuurnr = fr.factuurnr
    group by periode
  ) as vorige_periode
left join
  ( select month( datum) as periode, SUM( aantal * prijs ) as omzet
    from       factuur f
    inner join factuurregels fr on f.factuurnr = fr.factuurnr
    group by f.periode
  ) as huidige_periode
on huidige_periode.periode = vorige_periode.periode - 1

[ Voor 1% gewijzigd door Verwijderd op 16-03-2004 14:42 . Reden: layout code ]

Pagina: 1