Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

MySQL berekende waardes optellen

Pagina: 1
Acties:

  • gentillekes
  • Registratie: Juli 2010
  • Laatst online: 17-08-2023
Beste,

Ik ben bezig om de output van een offertesysteem te gebruiken voor een BI-afstudeerproject.

Bij het maken van een proof-of-concept wil ik een krachtige query bouwen welke alle benodigde gegevens uitspuugt. Het offertesysteem bevat meerdere berekende waarden die ik bij elkaar wil optellen:
SUM van totaal aantal producten op de offerte (subtotalen);
SUM van totaal aantal installatieminuten * uurloon;
SUM van beide bovenstaande berekende waarden als totaalprijs.

Ik ben geen SQL-held, kan iemand mij wijzen hoe ik bovenstaande kan optellen in SQL?
Zelf dacht ik aan een geneste query:
SUM(
SUM(producten)
SYM(uurloon)
) AS totalen.

Dit werkt helaas niet... in welke hoek moet ik het antwoord zoeken?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

SUM(a) + SUM(b) AS c

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • gentillekes
  • Registratie: Juli 2010
  • Laatst online: 17-08-2023
Bedankt voor je reply, ik gebruik de termen AS om de berekende waarden een andere naam te geven. Hoe pas ik bovenstaande dan toe?

Deel van de query:
ROUND(SUM(Artikelregel.artikelregelProjectManagement * Artikelregel.artikelregelAantal * 1.583333),2) AS PMkosten, ROUND(SUM(Artikelregel.artikelregelVerkoop * Artikelregel.artikelregelAantal),2) AS subtotaal

Als ik:

ROUND(SUM(Artikelregel.artikelregelProjectManagement * Artikelregel.artikelregelAantal * 1.583333),2) AS PMkosten + ROUND(SUM(Artikelregel.artikelregelVerkoop * Artikelregel.artikelregelAantal),2) AS subtotaal AS totaal

gebruik dan staan 2 'AS statements' naast elkaar en dat geeft conflicten.

  • jbdeiman
  • Registratie: September 2008
  • Laatst online: 05:56
Het werkt ook niet op die manier, in SQL bouw je kolom voor kolom op en kan je niet op een dergelijke manier werken. Onderstaande zou (ongeveer) goed moeten gaan, het is uit het hoofd getypt dus kan zijn dat er ergens een typefoutje zit of ( of ) ontbreekt.

ROUND(SUM(Artikelregel.artikelregelProjectManagement * Artikelregel.artikelregelAantal * 1.583333),2) AS PMkosten, ROUND(SUM(Artikelregel.artikelregelVerkoop * Artikelregel.artikelregelAantal),2) AS subtotaal,
ROUND(SUM(Artikelregel.artikelregelProjectManagement * Artikelregel.artikelregelAantal * 1.583333) + SUM(Artikelregel.artikelregelVerkoop * Artikelregel.artikelregelAantal), 2) AS totaal

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

...of je telt die twee gewoon in je code op in plaats van in MySQL.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • gentillekes
  • Registratie: Juli 2010
  • Laatst online: 17-08-2023
@jbdeiman, bedankt voor je uitleg. Het principe is duidelijk, en op de juiste manier toegepast. Jouw oplossing werkt voor mij. Bedankt.

Ik weet niet of het is toegestaan om in ditzelfde topic nog een gerelateerde vraag te stellen? Bij deze een poging:

Het blijkt dat in het offertesysteem een onderscheid wordt gemaakt tussen producten en diensten. De diensten moet ik niet in het bovenstaande totaal meenemen. Onderscheid wordt gemaakt met een 0 en 1 uit het veld ProductDienstID. Waar moet ik deze WHERE plaatsen? Aangezien ik in deze query alle waarden wil berekenen (uiteindelijk) moet de WHERE niet de totale query beperken, maar enkel het veld Totaal.

Ik wil jullie niet gebruiken als 'afhaalchinees' voor code. Kunnen jullie mij wijzen waar ik deze oplossing moet zoeken?

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
gentillekes schreef op maandag 28 april 2014 @ 12:40:
Aangezien ik in deze query alle waarden wil berekenen (uiteindelijk) moet de WHERE niet de totale query beperken, maar enkel het veld Totaal.
Je berekening = je totaal (zoals je het nu gegeven hebt) en je wilt alles berekenen maar niet overal het totaal van hebben? Ikke nie snappe

Maar waarschijnlijk wil je een selfjoin hebben zodat je op de selfjoin condities kan zetten (of wat waarschijnlijk sneller is is dat je een subquery wilt hebben)
Pagina: 1