10% eraf boven en onder
Peter Wessels
07/06/2010 20:40:34Beste Allemaal,
Ik heb een vraag. Ik heb een aantal gegevens in de database bijvoorbeeld:
Id | Aantal
1 | 1000
2 | 1500
3 | 200
4 | 100
5 | 100
6 | 150
7 | 200
8 | 100
9 | 2
10 | 5
Nu wil ik alles selecteren en vervolgens de bovenste 10% en de onderste 10% eraf te halen. De vraag is, kan dat in 1 keer in 1 query?
Suggesties?
Peter
Ik heb een vraag. Ik heb een aantal gegevens in de database bijvoorbeeld:
Id | Aantal
1 | 1000
2 | 1500
3 | 200
4 | 100
5 | 100
6 | 150
7 | 200
8 | 100
9 | 2
10 | 5
Nu wil ik alles selecteren en vervolgens de bovenste 10% en de onderste 10% eraf te halen. De vraag is, kan dat in 1 keer in 1 query?
Suggesties?
Peter
PHP hulp
21/11/2024 14:06:29Martijn B
07/06/2010 20:43:10Wat je in ieder geval nodig hebt is :
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html
Voorbeeldje:
Geeft het gemiddelde terug van het aantal van alle records in tabel.
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html
Voorbeeldje:
Geeft het gemiddelde terug van het aantal van alle records in tabel.
Gewijzigd op 07/06/2010 20:43:28 door Martijn B
Peter Wessels
07/06/2010 20:58:17Nou, het gaat er echt om dat extreme getallen niet voorkomen. Dus de hoogste 1000 en 1500 en de laagste 2 en 5 eruit gefilterd worden.
Paul R
07/06/2010 21:35:27is zoiets wat je zoekt?
(test is de naam van je tabel)
edit: met between voor de leuk
(test is de naam van je tabel)
Code (php)
1
2
3
4
2
3
4
select aantal
from test
where aantal > (select AVG(aantal) from test)*0.20
and aantal < (select AVG(aantal) from test)*1.80;
from test
where aantal > (select AVG(aantal) from test)*0.20
and aantal < (select AVG(aantal) from test)*1.80;
edit: met between voor de leuk
Code (php)
1
2
3
4
2
3
4
select aantal
from test
where aantal between (select AVG(aantal) from test)*0.20
and (select AVG(aantal) from test)*1.80;
from test
where aantal between (select AVG(aantal) from test)*0.20
and (select AVG(aantal) from test)*1.80;
Gewijzigd op 07/06/2010 21:41:17 door Paul R
Pim -
07/06/2010 22:51:03Nee, moet je anders doen.
Op Paul's manier worden de rijen geselecteerd op waarde, niet op rang.
Je moet gewoon iets met limits en order by doen, dus limiteren op n/5 boven en onder, geschikt op waarde.
Weet niet of dit goede SQL is, ben daar niet goed in.
SELECT *
FROM test
ORDER BY waarde
LIMIT (SELECT count(*) FROM test)/5, (SELECT count(*) FROM test)/5*4
Op Paul's manier worden de rijen geselecteerd op waarde, niet op rang.
Je moet gewoon iets met limits en order by doen, dus limiteren op n/5 boven en onder, geschikt op waarde.
Weet niet of dit goede SQL is, ben daar niet goed in.
SELECT *
FROM test
ORDER BY waarde
LIMIT (SELECT count(*) FROM test)/5, (SELECT count(*) FROM test)/5*4