De rij met de hoogste waarde van een bepaalde kolom selecteren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Paul K

Paul K

03/10/2010 17:18:41
Quote Anchor link
Hallo allemaal,

Ik heb een grote tabel, met circa 33K records, dit zal later nog groeien naar ~4 miljoen. Nu stel ik even een simpel voorbeeldje:
-kolom userid -kolom geld
4 | 5.73
2 | 9.92
483 | 1852.58
853 | 5324.04

Nu wil ik dus zo snel mogelijk de userid 853 eruitpikken. Ik weet dat ik kan doen ORDER BY geld DESC LIMIT 1. Maar ik vroeg me af of dit wel een efficiënte oplossing was (met 4+ mil records). Kan dit niet veel sneller?

Groet
 
PHP hulp

PHP hulp

26/04/2024 22:10:29
 
Noppes Homeland

Noppes Homeland

03/10/2010 17:41:00
Quote Anchor link
Leer eens zoeken!!

Trefwoord:
MAX

Link:
http://www.w3schools.com/sql/sql_func_max.asp
 
Paul K

Paul K

03/10/2010 18:48:46
Quote Anchor link
De vriendelijkheid is dus wél duidelijk achteruit gegaan sinds de nieuwe phphulp opstaat, jammer :( Was altijd zo'n trouwe gebruiker.

Edit: en dan werkt 't nog niet! Je wil namelijk ook nog steeds de ID hebben van die hoogste gebruiker. En als je wil doen
SELECT id,MAX(geld) FROM xxx dan pakt hij de eerste ID die hij tegenkomt, en niet van de rij die het hoogste is.
Gewijzigd op 03/10/2010 18:51:35 door Paul K
 
Noppes Homeland

Noppes Homeland

03/10/2010 20:09:38
Quote Anchor link
met iets meer fantasie, lukt het je misschien wel.
 
Milo S

Milo S

03/10/2010 20:48:30
Quote Anchor link
MAX(id, geld)
i guess
 
Noppes Homeland

Noppes Homeland

03/10/2010 21:20:05
Quote Anchor link
nee, max is single.....
 
Nicoow Unknown

Nicoow Unknown

03/10/2010 21:29:36
Quote Anchor link
SELECT *
FROM iets
WHERE geld = (
SELECT MAX( geld )
FROM iets
LIMIT 0 , 1 );

Weet niet of dit het efficiëntst is, maar het kan wel.
Misschien dat het leuk is als je het even test.

Gewoon de verschillende oplossingen in PHPMyAdmin uitvoeren, en dan de tijden even in een tabelletje zetten.

Toevoeging op 03/10/2010 21:41:37:

Ik heb zelf even snel een test gedaan op een miljoen records.

Met de order by duurde het gemiddeld 0,38 seconden om de maximum op te halen, (er zijn alleen meerdere met de hoogste waarde en je krijgt er maar 1)

En met de subquery in de WHERE duurde het gemiddeld 0,29 seconden.

Misschien heeft er iemand nog andere ideeën.
 

03/10/2010 21:43:28
Quote Anchor link
Nico Kaag op 03/10/2010 21:29:36:
SELECT *
FROM iets
WHERE geld = (
SELECT MAX( geld )
FROM iets
LIMIT 0 , 1 );

Weet niet of dit het efficiëntst is, maar het kan wel.
Misschien dat het leuk is als je het even test.

Gewoon de verschillende oplossingen in PHPMyAdmin uitvoeren, en dan de tijden even in een tabelletje zetten.

Toevoeging op 03/10/2010 21:41:37:

Ik heb zelf even snel een test gedaan op een miljoen records.

Met de order by duurde het gemiddeld 0,38 seconden om de maximum op te halen, (er zijn alleen meerdere met de hoogste waarde en je krijgt er maar 1)

En met de subquery in de WHERE duurde het gemiddeld 0,29 seconden.

Misschien heeft er iemand nog andere ideeën.


Zulke dingen als met max werken zijn wel voorbeelden van subqueries op scholen... :-)
(Geen idee waar dit topic over gaat, maar gewoon weer lekker aangeven dat je nog wel iets leert op een school.)
 
Noppes Homeland

Noppes Homeland

03/10/2010 21:43:56
Quote Anchor link
@Nico Kaag gij moogt niet vloeken "PHPMyAdmin"

En jouw query ka nog steeds meerdere resultaten opleven en de LIMIT in de subquery is overbodig want

SELECT max(geld) mgeld
FROM iets

zal in principe maar 1 resultaat teruggeven namenlijk het hoogste geldbedrag

Configureer eerst mysql zodanig dat het werkt volgens de Standaard SQL normen, dat voorkomt al een hoop ellende.
Gewijzigd op 03/10/2010 21:44:23 door Noppes Homeland
 
Nicoow Unknown

Nicoow Unknown

03/10/2010 21:57:14
Quote Anchor link
Mijn query levert ook meerdere resultaten op, namelijke IEDEREEN die het meeste geld heeft.
En die LIMIT is inderdaad nutteloos, maar dat zijn van die dingen die er bij mij stiekem ingeslopen zijn, omdat altijd als extra erin te gooien.

En wat is er mis met PHPMyAdmin, is het tegenwoordig van Amstel en daarom "PHPOurAdmin"?

Ik zelf zie niks verkeerds aan PHPOurAdmin, het is een makkelijke tool om snel een database up te loaden, en zo af en toe een query te testen.
Misschien dat ik iets mis, maar dan laat ik mij graag even bijspijkeren.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.