Toon posts:

[mysql] query vereenvoudigen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een vraagje over het volgende stukje SQL (MySQL)

code:
1
2
3
4
5
6
7
8
9
10
11
SELECT
  od.Prijs,
  od.Korting,
  od.BTWpercentage,
  (od.Prijs * od.Aantal) - (((od.Prijs * od.Aantal)/100) * od.Korting) as exBTW,
  ((od.Prijs * od.Aantal) - (((od.Prijs * od.Aantal)/100) * od.Korting) + ((od.Prijs * od.Aantal) - ((((od.Prijs * od.Aantal)/100) * od.Korting)/100))) * od.BTWpercentage as incBTW
FROM 
  Orderdetails od,
  Produkten p
WHERE 
  od.ProduktID = p.ProduktID



Hoe kan ik die 2 lange regels simpeler maken? Zijn er bepaalde SQL functies om met percentages te werken?

Ik kan het niet terug vinden in de ruim 1000 pagina's tellende PDF file.

[ Voor 9% gewijzigd door Verwijderd op 12-02-2004 10:52 ]


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

gorgi_19

Kruimeltjes zijn weer op :9

(1-(od.korting/100)) * od.Prijs * od.Aantal

niet al veel eenvoudiger?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • cavey
  • Registratie: Augustus 2000
  • Laatst online: 17-02 19:31
niet

maar wat je wel kan doen is die where clausule weghalen door het volgende stukje te gebruiken:

code:
1
2
FROM Orderdetails od
inner join Produkten p on od.ProduktID = p.ProduktID


Zal verder geen moer uitmaken natuurlijk. Hehehe.

MySQL? zoek gewoon in de online help op www.mysql.com ... ipv 1000 pagina's pdf door te spitten (en als het al 1000 pagina's is.... dan zit er toch verdorie wel een inhoudsopgave in en een register?! Zoals elk standaard boekwerk zodat je makkelijk dingen kan terugvinden?)

Verwijderd

Topicstarter
komakeef schreef op 12 februari 2004 @ 10:36:
niet

maar wat je wel kan doen is die where clausule weghalen door het volgende stukje te gebruiken:

code:
1
2
FROM Orderdetails od
inner join Produkten p on od.ProduktID = p.ProduktID


Zal verder geen moer uitmaken natuurlijk. Hehehe.

MySQL? zoek gewoon in de online help op www.mysql.com ... ipv 1000 pagina's pdf door te spitten (en als het al 1000 pagina's is.... dan zit er toch verdorie wel een inhoudsopgave in en een register?! Zoals elk standaard boekwerk zodat je makkelijk dingen kan terugvinden?)
hahaha... ik ben juist overgestapt naar de WHERE manier, ik vindt het prettiger werken. :) Ieder zijn voorkeuren he? ;)

en wat betreft die PDF tuurlijk zit er een inhoudsopgave in. ctrl-F en je kunt zo zoeken naar woorden als percentage / percent etc etc.

[ Voor 10% gewijzigd door Verwijderd op 12-02-2004 10:41 ]


  • Kippenijzer
  • Registratie: Juni 2001
  • Laatst online: 21-05 22:36

Kippenijzer

McFallafel, nu met paardevlees

Hef je de btw nu niet verkeerd overigens? Je houd nu geen rekening met de korting, en dat moet je mijns inziens wel doen, waarom niet gewoon de uitkomst bij regel 6 (die je inderdaad al met gorgi_19's opmerking kunt vereenvoudigen) gewoon keer 1+(od.BTWpercentage/100) doen? BTW berkenen over de volle prijs, terwijl ze de kortingsprijs betalen klopt natuurlijk niet ;)

Verwijderd

Topicstarter
Kippenijzer schreef op 12 februari 2004 @ 10:45:
Hef je de btw nu niet verkeerd overigens? Je houd nu geen rekening met de korting, en dat moet je mijns inziens wel doen, waarom niet gewoon de uitkomst bij regel 6 (die je inderdaad al met gorgi_19's opmerking kunt vereenvoudigen) gewoon keer 1+(od.BTWpercentage/100) doen? BTW berkenen over de volle prijs, terwijl ze de kortingsprijs betalen klopt natuurlijk niet ;)
O sorry, ik heb het net gewoon effe gauw getypt, maar inderdaad in mijn echte code is de tweede regel nog veel langer. :)

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 00:04

ripexx

bibs

Daarnaast is het stukje code met berekking tot de incl btw natuurlijk ook een beetje inloos, je doet nu namelijk bijna twee keer hetzelfde.

code:
1
2
(od.Prijs * od.Aantal) - (((od.Prijs * od.Aantal)/100) * od.Korting) as exBTW,
(od.Prijs * od.Aantal) - (((od.Prijs * od.Aantal)/100) * od.Korting) + (((od.Prijs * od.Aantal)/100) * od.BTWpercentage) as incBTW

wordt
code:
1
2
(1-(od.korting/100)) * od.Prijs * od.Aantal as exBTW,
exBTW * (od.BTWpercentage/100) as incBTW

Deels tot stand gekomen door gorgi_19 ;)

buit is binnen sukkel


Verwijderd

Topicstarter
ripexx schreef op 12 februari 2004 @ 10:48:
Daarnaast is het stukje code met berekking tot de incl btw natuurlijk ook een beetje inloos, je doet nu namelijk bijna twee keer hetzelfde.

code:
1
2
(od.Prijs * od.Aantal) - (((od.Prijs * od.Aantal)/100) * od.Korting) as exBTW,
(od.Prijs * od.Aantal) - (((od.Prijs * od.Aantal)/100) * od.Korting) + (((od.Prijs * od.Aantal)/100) * od.BTWpercentage) as incBTW

wordt
code:
1
2
(1-(od.korting/100)) * od.Prijs * od.Aantal as exBTW,
exBTW * (od.BTWpercentage/100) as incBTW

Deels tot stand gekomen door gorgi_19 ;)
Dat is nou juist het probleem, dat werkt niet in MySQL. :'(
En zowel dan mag jij mij uitleggen hoe! :)

  • cavey
  • Registratie: Augustus 2000
  • Laatst online: 17-02 19:31
Nja, ach, dan copy paste je die eerste regel gewoon ff....... voor dit soort dingen heb ik zelf in Transact-SQL user-defined functies geschreven..... nog niet zalig makend, maar het werkt wel ;)

(JAJA, ik weet, in MySQL kan dat niet.. maar goed)...

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 00:04

ripexx

bibs

Verwijderd schreef op 12 februari 2004 @ 10:55:
[...]
Dat is nou juist het probleem, dat werkt niet in MySQL. :'(
En zowel dan mag jij mij uitleggen hoe! :)
Ja, ik weet het MySQL is niet echt lekker met het rekenen met verwijzingen. :X Ben zelf ook al eens tegen dat probleem aangelopen, in dat geval ontkom je er niet aan om het stuk twee keer uit te voeren.

buit is binnen sukkel


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
ik meen me te herinneren, dat als je een zelfde waarde uit een tabel 2x wilt gebruiken, je die moet aliassen. (Of is dat niet hier van toepassing?)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


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

gorgi_19

Kruimeltjes zijn weer op :9

Grijze Vos schreef op 12 februari 2004 @ 11:30:
ik meen me te herinneren, dat als je een zelfde waarde uit een tabel 2x wilt gebruiken, je die moet aliassen. (Of is dat niet hier van toepassing?)
code:
1
2
(1-(od.korting/100)) * od.Prijs * od.Aantal as exBTW,
exBTW * (od.BTWpercentage/100) as incBTW

Je aliast toch in dit voorbeeld?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op 12 februari 2004 @ 11:31:
[...]

code:
1
2
(1-(od.korting/100)) * od.Prijs * od.Aantal as exBTW,
exBTW * (od.BTWpercentage/100) as incBTW

Je aliast toch in dit voorbeeld?
leuk allemaal, maar dat werkt niet, niet in MySQL en ook niet in MSSQL.
tenminste.... dat alias gedeelte, dat 1-(....) dat is natuurlijk wel een stukje dat het al vereenvoudigt.

[ Voor 14% gewijzigd door Verwijderd op 12-02-2004 11:44 ]


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

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 12 februari 2004 @ 11:43:
leuk allemaal, maar dat werkt niet, niet in MySQL en ook niet in MSSQL.
tenminste.... dat alias gedeelte, dat 1-(....) dat is natuurlijk wel een stukje dat het al vereenvoudigt.
't was ook een reactie op Grijze Vos

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 00:04

ripexx

bibs

gorgi_19 schreef op 12 februari 2004 @ 11:31:
[...]

code:
1
2
(1-(od.korting/100)) * od.Prijs * od.Aantal as exBTW,
exBTW * (od.BTWpercentage/100) as incBTW

Je aliast toch in dit voorbeeld?
Maar MySQL wil hier niet echt mee werken, op een of andere accepteerd MySQL geen alias die het resultaat is van een berekening. Volgens mij is het een manier om een oneindige loop in je query te voorkomen, die mysql op een beetje ranzige manier heeft opgelost.

Het onderstaande kan wel
code:
1
2
3
4
5
SELECT 
veld1 AS a,
veld1 AS b,
veld1 * veld1 AS c
FROM tabel1

resultaat:
a b c
8 8 64

Dit weer niet
code:
1
2
3
4
5
6
SELECT 
  veld1 AS a,
  veld1 AS b,
  veld1 * veld1 AS c,
  c * veld2 AS d
FROM tabel1

resultaat:
Unknown column 'c' in 'field list'

Verwacht resultaat:
a b c d
8 8 64 128

Enige wat ik direct in het mysql manual kan terug vinden is het probleem van het gebruik van colom aliassen in de where clause. (http://www.mysql.com/doc/en/Problems_with_alias.html)

buit is binnen sukkel


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
gorgi_19 schreef op 12 februari 2004 @ 11:31:
Je aliast toch in dit voorbeeld?
Klopt, beetje overheen gelezen, sorry. :+

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1