[SQL] WHERE MAX(voorraad) > 4
geeft mij wel resultaat, maar hier wil ik eigenlijk nog waar MAX(p_qty) > 4.
Als ik dit in WHERE zet krijg ik foutmeldingen :-( ok als ik in SELECT MAX(p_qty) as quantity, en in de WHERE quantity > 4, krijg ik ook foutmeldingen.
Hoe ga ik hier het beste mee om? Zonder het met php nog eens na te lopen of de qty wel groter is dan 4
Gewijzigd op 15/10/2016 20:27:50 door Dennis WhoCares
Edit: volgens mij was ik iets te voorbarig ...
Gewijzigd op 15/10/2016 21:04:22 door Ozzie PHP
WHERE qty > 4
doe je nou een SELECT * van 'FROM-results' ?
Ja de subquery wordt als eerste uitgevoerd. Het resultaat kun je je voorstellen als een nieuwe tabel. Op deze tabel doe je weer een nieuwe query.
Frank Nietbelangrijk op 15/10/2016 21:19:13:
Ja de subquery wordt als eerste uitgevoerd. Het resultaat kun je je voorstellen als een nieuwe tabel. Op deze tabel doe je weer een nieuwe query.
awesome, weer wat cools geleerd!
Duizend maal dank!
Met HAVING natuurlijk :-)
Dank je wel Ger.
Ik neem aan dat het gebruik van HAVING sneller is dan een subquery?
Maar meten is weten en gokken wordt bokken, dus gebruik het EXPLAIN commando om te meten hoe lang je query er precies over doet en wat de database intern allemaal uitvlooit om het resultaat te berekenen. Daarmee komen ook meteen ontbrekende indexes aan het licht, evenals gebrekken aan RAM etc.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
SELECT
p_category, MAX(p_qty) AS max_qty
FROM
products
WHERE p_qty > 4
GROUP BY
p_category
p_category, MAX(p_qty) AS max_qty
FROM
products
WHERE p_qty > 4
GROUP BY
p_category
Hiermee worden alleen producten met p_qty > 4 geselecteerd dus zal max_qty ook > 4 zijn
Wel even een "explain" er overheen halen en zien welke indexes je nodig hebt. Een index op p_qty sowieso, maar wellicht ook een combinatie met p_category, afhankelijk van hoeveel records je hier uit gaat krijgen. EXPLAIN is your friend.
Ger van Steenderen op 18/10/2016 10:30:35:
Beetje lomp ja.. inderdaad. Gewoon standaard query voldoet ook heb het net veranderd in m'n project.
Ik kan me nieteens meer herinneren waarom ik MAX() gebruikte. *tilt*