[SQL] WHERE MAX(voorraad) > 4

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis WhoCares

Dennis WhoCares

15/10/2016 19:59:34
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT   p_category as mainCat, MAX(p_qty)
FROM     products
GROUP BY p_category


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
 
PHP hulp

PHP hulp

25/12/2024 07:00:02
 
Frank Nietbelangrijk

Frank Nietbelangrijk

15/10/2016 20:59:58
Quote Anchor link
Ik zou dat met een subquery oplossen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
SELECT
    *
FROM (
    SELECT
        p_category, MAX(p_qty) AS max_qty
    FROM
        products
    GROUP BY
        p_category
    ) p
WHERE
    p.max_qty > 3
 
Ozzie PHP

Ozzie PHP

15/10/2016 21:00:39
Quote Anchor link
Uhm ehhh ... gewoon die MAX weglaten misschien? ;-)

Edit: volgens mij was ik iets te voorbarig ...
Gewijzigd op 15/10/2016 21:04:22 door Ozzie PHP
 
Adoptive Solution

Adoptive Solution

15/10/2016 21:15:51
Quote Anchor link
Ik zou het zo oplossen :

WHERE qty > 4
 
Dennis WhoCares

Dennis WhoCares

15/10/2016 21:17:23
Quote Anchor link
huh ... maar.. HEH!!!??? snap er niks van :-/
doe je nou een SELECT * van 'FROM-results' ?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

15/10/2016 21:19:13
Quote Anchor link
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.
 
Dennis WhoCares

Dennis WhoCares

15/10/2016 21:20:56
Quote Anchor link
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!
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

16/10/2016 11:48:09
Quote Anchor link
Het is niet eens nodig om dit met een subquery te doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
p_category, MAX(p_qty) AS max_qty
FROM
products
GROUP BY
p_category
HAVING max_qty > 4
 
Frank Nietbelangrijk

Frank Nietbelangrijk

16/10/2016 11:50:11
Quote Anchor link
>> Het is niet eens nodig om dit met een subquery te doen

Met HAVING natuurlijk :-)

Dank je wel Ger.
 
Dennis WhoCares

Dennis WhoCares

16/10/2016 12:30:18
Quote Anchor link
Staat genoteerd Ger! Ook jij heel erg bedankt!

Ik neem aan dat het gebruik van HAVING sneller is dan een subquery?
 
Pg Vincent

Pg Vincent

16/10/2016 20:31:49
Quote Anchor link
Databases zijn slim (nouja, de betere databases zijn slim) en kunnen je query optimaliseren omdat ze al een idee hebben van hoeveel records er in de tabel staan per waarde van p_category, dus ja, het kan heel goed zijn dat een HAVING sneller is dan een subquery, ookal doen geven ze hetzelfde resultaat.

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.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/10/2016 10:30:35
Quote Anchor link
Het kan zelfs nog sneller:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

Hiermee worden alleen producten met p_qty > 4 geselecteerd dus zal max_qty ook > 4 zijn
 
Pg Vincent

Pg Vincent

18/10/2016 10:59:21
Quote Anchor link
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.
 
Dennis WhoCares

Dennis WhoCares

18/10/2016 15:28:31
Quote Anchor link
Ger van Steenderen op 18/10/2016 10:30:35:
Het kan zelfs nog sneller:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

Hiermee worden alleen producten met p_qty > 4 geselecteerd dus zal max_qty ook > 4 zijn


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*
 



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.