Group by en limit probleem
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
ORDERS
id| cust | ispaid |
__|______|________|
1 | A | 1 |
2 | B | 1 |
3 | C | 1 |
4 | D | 1 |
5 | D | 0 |
6 | E | 0 |
7 | E | 0 |
8 | E | 0 |
9 | F | 0 |
10| G | 1 |
id| cust | ispaid |
__|______|________|
1 | A | 1 |
2 | B | 1 |
3 | C | 1 |
4 | D | 1 |
5 | D | 0 |
6 | E | 0 |
7 | E | 0 |
8 | E | 0 |
9 | F | 0 |
10| G | 1 |
Nu wil ik van de laaste 10 orders zien hoeveel orders er niet betaald zijn. In het bovenstaande voorbeeld zou dit getal wat er uit moet komen dus 2 zijn (customer E en F). Customer D niet want die heeft wel in ieder geval 1 wel betaalde order.
Ik gebruikte de volgende query:
Alleen krijg ik nu alle klanten die een order hebben die niet betaald is. Wat kan ik in de query veranderen zodat ik alleen met deze voorbeeld tabel customer E en F als output krijg?
Alvast bedankt voor jullie hulp.
Gewijzigd op 20/10/2014 16:48:54 door Henk de Vriep
Op de ID's kun je niet vertrouwen, na database onderhoud kunnen lege gaten weer opgevuld worden.
Je moet dus achterhalen
- wat zijn de laatste 10 orders
- welke user heeft niets betaald.
stap 1:
Dan heb je dus de dataset die je moet onderzoeken. Voor het gemak: denk even dat dit de tabel dataset10 zou zijn/
stap 2:
Code (php)
1
2
3
4
2
3
4
SELECT cust, SUM(ispaid) AS betaald
FROM dataset10
GROUP BY cust
HAVING SUM(ispaid) = 0
FROM dataset10
GROUP BY cust
HAVING SUM(ispaid) = 0
nu die 2 in elkaar schuiven:
Code (php)
1
2
3
4
2
3
4
SELECT cust, SUM(ispaid) AS betaald
FROM (SELECT cust, ispaid FROM orders ORDER BY id DESC LIMIT 10) AS dataset10
GROUP BY cust
HAVING SUM(ispaid) = 0
FROM (SELECT cust, ispaid FROM orders ORDER BY id DESC LIMIT 10) AS dataset10
GROUP BY cust
HAVING SUM(ispaid) = 0
dat zijn de klanten van de laaste 10 orders, die van die laatste 10 orders nog niets betaald hebben.
of dat een zinvol gegeven is?
dat verandert zodra er een order bij komt.
Ik zal de query van Ivo later op de dag een keer draaien om te zien of dat het gewenste resultaat heeft.
Ik mag er vanuit gaan dat je een aparte tabel customers hebt? Dan kun je met je join al filteren.