[mysql / sql] Combineren van twee sql statements

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Deze twee sql statements moeten gecombineerd worden, waarbij in de WHERE de currency anders is. Zelf weet ik alleen niet hoe dit moet en of dit mogenlijk is. Hoop dat iemand de oplossing weet, alvast bedankt voor de moeite.

SELECT o.article_number, ROUND(SUM(o.price), 2) as totaalprijs, COUNT(o.article_number) as aantal, p.NAME as productnaam
FROM shop_order as o, shop_product as p WHERE o.article_number = p.article_number AND currency='euro'
GROUP BY p.NAME
ORDER BY o.article_number

SELECT o.article_number, ROUND(SUM(o.price), 2) as totaalprijs, COUNT(o.article_number) as aantal, p.NAME as productnaam
FROM shop_order as o, shop_product as p WHERE o.article_number = p.article_number AND currency='dollar'
GROUP BY p.NAME
ORDER BY o.article_number

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Kwestie van AND en OR combineren :?

Enige wat je zou moeten toevoegen is currency='dollar' en met bovenstaande kreten moet je het kunnen combineren!

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 09-09 13:57

pjvandesande

GC.Collect(head);

SQL:
1
2
3
4
5
6
7
8
SELECT
     o.article_number, ROUND(SUM(o.price), 2) as totaalprijs, COUNT(o.article_number) as aantal, p.NAME as productnaam 
FROM 
     shop_order as o, shop_product as p 
WHERE 
     o.article_number = p.article_number AND (currency='dollar' OR currency='euro')
GROUP BY p.NAME 
ORDER BY o.article_number


Bedoel je dit?

edit:
BtM909 was me voor.

[ Voor 10% gewijzigd door pjvandesande op 12-07-2004 14:34 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het probleem is zowel dat ik van de euro en de dollar apart wil optellen en beide tonen

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 12 juli 2004 @ 14:31:
Deze twee sql statements moeten gecombineerd worden, waarbij in de WHERE de currency anders is. Zelf weet ik alleen niet hoe dit moet en of dit mogenlijk is. Hoop dat iemand de oplossing weet, alvast bedankt voor de moeite.

[edit]
De dollar en de euro bedragen moeten dus apart worden opgeteld en apart worden weergegeven in de tabel.

SELECT o.article_number, ROUND(SUM(o.price), 2) as totaalprijs, COUNT(o.article_number) as aantal, p.NAME as productnaam
FROM shop_order as o, shop_product as p WHERE o.article_number = p.article_number AND currency='euro'
GROUP BY p.NAME
ORDER BY o.article_number

SELECT o.article_number, ROUND(SUM(o.price), 2) as totaalprijs, COUNT(o.article_number) as aantal, p.NAME as productnaam
FROM shop_order as o, shop_product as p WHERE o.article_number = p.article_number AND currency='dollar'
GROUP BY p.NAME
ORDER BY o.article_number

Acties:
  • 0 Henk 'm!

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 09-09 13:57

pjvandesande

GC.Collect(head);

Verwijderd schreef op 12 juli 2004 @ 14:35:
Het probleem is zowel dat ik van de euro en de dollar apart wil optellen en beide tonen
Ja, heb je al naar de antwoorden gekeken en wat heb je inmiddels al geprobeert?

Acties:
  • 0 Henk 'm!

  • Johnny Goodbye
  • Registratie: Augustus 2003
  • Laatst online: 11-09 16:34
uit het blote hoofd:

probeer ook te groeperen op currency

code:
1
2
3
4
5
6
7
8
 SELECT
     o.article_number, ROUND(SUM(o.price), 2) as totaalprijs, COUNT(o.article_number) as aantal, p.NAME as productnaam 
FROM 
     shop_order as o, shop_product as p 
WHERE 
     o.article_number = p.article_number AND (currency='dollar' OR currency='euro')
GROUP BY p.NAME , o.currency
ORDER BY o.article_number

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
net geprobeerd maar dat groeperen op currency heeft geen zin

Acties:
  • 0 Henk 'm!

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 09-09 13:57

pjvandesande

GC.Collect(head);

Verwijderd schreef op 12 juli 2004 @ 14:44:
net geprobeerd maar dat groeperen op currency heeft geen zin
Ik snap nu nog steeds je probleem niet, met een OR statement is het te combineren.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik wil de bedragen van euro bij elkaar optellen en de bedragen van dollars en deze beide weer gegeven. En dus niet zowel de euro en dollar bij elkaar op te tellen zoals met een OR statement kan


zoiets als dit misschien

SELECT SUM(dollar), SUM(euro)
FROM ..
WHERE currency='dollar' as dollar and currency='euro' as euro

Dit kan natuurlijk niet maar hoop dat je zo het probleem begrijpt

Acties:
  • 0 Henk 'm!

Verwijderd

Waarom gebruik je geen union?

code:
1
2
3
4
5
6
7
8
9
10
11
SELECT o.article_number, ROUND(SUM(o.price), 2) as totaalprijs, COUNT(o.article_number) as aantal, p.NAME as productnaam 
FROM shop_order as o, shop_product as p WHERE o.article_number = p.article_number AND currency='euro' 
GROUP BY p.NAME 
ORDER BY o.article_number

union all

SELECT o.article_number, ROUND(SUM(o.price), 2) as totaalprijs, COUNT(o.article_number) as aantal, p.NAME as productnaam 
FROM shop_order as o, shop_product as p WHERE o.article_number = p.article_number AND currency='dollar' 
GROUP BY p.NAME 
ORDER BY o.article_number

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
aan die union had ik niet gedacht, ga het meteen proberen

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 12 juli 2004 @ 14:31:
Deze twee sql statements moeten gecombineerd worden, waarbij in de WHERE de currency anders is. Zelf weet ik alleen niet hoe dit moet en of dit mogenlijk is. Hoop dat iemand de oplossing weet, alvast bedankt voor de moeite.

SELECT o.article_number, ROUND(SUM(o.price), 2) as totaalprijs, COUNT(o.article_number) as aantal, p.NAME as productnaam
FROM shop_order as o, shop_product as p WHERE o.article_number = p.article_number AND currency='euro'
GROUP BY p.NAME
ORDER BY o.article_number

SELECT o.article_number, ROUND(SUM(o.price), 2) as totaalprijs, COUNT(o.article_number) as aantal, p.NAME as productnaam
FROM shop_order as o, shop_product as p WHERE o.article_number = p.article_number AND currency='dollar'
GROUP BY p.NAME
ORDER BY o.article_number
Je kunt de resultaten van twee queries ook in één set krijgen dmv het statement UNION. Je hierbij er wel voor zorgen dat je evenveel kolommen selecteerd.
Heb je hier wat aan? :?

SELECT o.article_number, ROUND(SUM(o.price), 2) as totaalprijs, COUNT(o.article_number) as aantal, p.NAME as productnaam
FROM shop_order as o, shop_product as p WHERE o.article_number = p.article_number AND currency='euro'
GROUP BY p.NAME
ORDER BY o.article_number

union


SELECT o.article_number, ROUND(SUM(o.price), 2) as totaalprijs, COUNT(o.article_number) as aantal, p.NAME as productnaam
FROM shop_order as o, shop_product as p WHERE o.article_number = p.article_number AND currency='dollar'
GROUP BY p.NAME
ORDER BY o.article_number[/quote]

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
denk wel dat de union gaat werken, alleen de mysql server ondersteund het niet beneden versie 4 dus dan maar ff een nieuwe versie installeren of updaten naar de nieuwe versie.

Bedankt voor de oplossing en de response!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Een union werkt niet omdat dan de rijen worden samengevoed, eigenlijk zoek ik dus een union over de columnen ipv rows

Acties:
  • 0 Henk 'm!

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 00:16
Ik heb geen MySql bij de hand, maar onder MS-SQL werkt het volgende:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT x1.article_number, x1.totaalprijs as TotaalEURO, x1.aantal as AantalEURO, x2.totaalprijs as TotaalDOLLAR, x2.aantal as AantalDOLLAR, p.NAME as productnaam
  FROM shop_order 
  JOIN (SELECT article_number, ROUND(SUM(price), 2) as totaalprijs, COUNT(article_number) as aantal
          FROM shop_order
          WHERE currency='euro') x1 
    ON x1.article_number=o.article_number
  JOIN (SELECT article_number, ROUND(SUM(price), 2) as totaalprijs, COUNT(article_number) as aantal
          FROM shop_order
          WHERE currency='dollar') x2
    ON x2.article_number=o.article_number
  JOIN shop_product p
    ON p.article_number=o.article_number

Nu verschijnen alleen orders met daarin alle produkten die zowel in $ als in € zijn besteld. Dus eventueel nog een full join van de eerste 2 joins maken om ook resultaten te krijgen indien alleen $ of alleen € gebruikt worden.

Maar zoals ik al zei, ik weet alleen dat dit werkt onder MS-SQL. Volgens mij is MySQL wat beperkter bij zulke queries. (NOFI)

Acties:
  • 0 Henk 'm!

  • Vaudtje
  • Registratie: April 2002
  • Niet online
Ook een 'oplossing', maar wel redelijk ranzig:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
  o.article_number,
  ROUND(SUM(IF( currency='dollar',o.price,0)), 2) as totaalprijsDollar,
  ROUND(SUM(IF( currency='euro',o.price,0)), 2) as totaalprijsEuro,
  COUNT(o.article_number) as aantal, p.NAME as productnaam
FROM
  shop_order as o, shop_product as p
WHERE
  o.article_number = p.article_number
  AND (currency='euro' 
           OR currency='dollar')
GROUP BY
  p.NAME
ORDER BY
  o.article_number


Ik weet niet hoe het zit met subqueries in de laatste versie van MySQL, maar misschien is dit dan een oplossing:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
SELECT
  FIRST(article_number),
  ROUND(SUM(priceDollar), 2) as totaalprijsDollar,
  ROUND(SUM(priceEuro), 2) as totaalprijsEuro,
  FIRST(aantal),
  FIRST(productnaam)
FROM 
(  SELECT
    o.article_number,
    o.price as priceDollar
    COUNT(o.article_number) as aantal,
    p.NAME as productnaam
  FROM
    shop_order as o, shop_product as p
  WHERE
    o.article_number = p.article_number
    AND currency='dolar' 

  UNION

  SELECT
    o.article_number,
    o.price as priceEuro
    COUNT(o.article_number) as aantal,
    p.NAME as productnaam
  FROM
    shop_order as o, shop_product as p
  WHERE
    o.article_number = p.article_number
    AND currency='euro' 
)
GROUP BY
  productnaam
ORDER BY
  article_number


@questa: Misschien is tariefstructuur per munt verschillend, dat is i.i.g. met deze opzet mogelijk. Anders is een conversietabel natuurlijk veel makkelijker inderdaad.

[ Voor 54% gewijzigd door Vaudtje op 13-07-2004 14:01 ]

In deeze zin staan drie fauten


Acties:
  • 0 Henk 'm!

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 09-09 13:57

pjvandesande

GC.Collect(head);

Is het niet makkelijker om gewoon de prijs om te rekenen naar euro's of dollars?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor de moeite, het is gelukt door gebruik te maken van de if in de 'select', de 'join' manier van mssql was niet beschikbaar in mysql en de union manier wou kreeg ik niet werekend, maar des ondanks bedankt voor de reacties en de inzet.
Pagina: 1