2011-02-10 14 views
6

Se voglio selezionare valori minimi e massimi da un'intera tabella posso usare questo:SELEZIONA min e il valore massimo da una parte di una tabella in MySQL

SELECT min(price) as min_price, max(price) as max_price FROM `prices` 

Ma come per selezionare i valori minimo e massimo da solo una parte di un tavolo? Ad esempio, ho 30 righe in una tabella. Voglio selezionare valori minimi e massimi da prime dieci righe, poi dal secondo dieci file e quindi formare l'ultima cosa 10.

Ho provato come

SELECT min(price) as min_price, max(price) as max_price FROM `prices` LIMIT 0,10 

ma questo non ha funzionato.

Come posso risolvere questo problema con le domande minime?

+1

Definire "prime dieci righe". Quale campo stai usando per determinare l'ordine delle righe? – JNK

+0

controlla la mia risposta per ottenere un intervallo arbitrario di righe – reggie

risposta

13
SELECT MIN(PRICE) AS MinPrice, MAX(PRICE) AS MaxPrice FROM (SELECT PRICE FROM PRICES LIMIT 10) tmp; 

inoltre, MySQL hanno una caratteristica fredda che vi permetterà di tornare un intervallo arbitrario di file (ad esempio, le righe 10-20 ritorno). Ciò è molto utile per la visualizzazione di pagine di record:

SELECT column FROM table 
LIMIT 10 OFFSET 20 

La query sopra restituirà le righe 20-30.

Così, in breve, per ritornare le righe da 20 a 30 in caso di query, è possibile utilizzare:

SELECT MIN(PRICE) AS MinPrice, MAX(PRICE) AS MaxPrice 
FROM (SELECT PRICE FROM PRICES LIMIT 10 OFFSET 20); 

è necessario modificare il valore di offset per specificare il punto di inizio della vostra gamma.

+0

Grazie! Questo è esattamente ciò di cui ho bisogno. La query finale era SELECT min (t1.price) come min_price, max (t1.price) come max_price FROM (prezzo SELECT FROM 'ko_base_kk_old' ORDER BY prezzo LIMIT 0,10) come t1 –

+0

L'ho aggiornato di più per la vostra comprensione. e tu sei il benvenuto :) – reggie

6

Hai provato:

SELECT min(price) as min_price, max(price) as max_price FROM 
    (SELECT price FROM `prices` LIMIT 0,10); 
+0

oops ho avuto la stessa risposta :) – reggie

+0

anche le parole chiave OFFSET funzionano bene in questo scenario :) – reggie

+0

@reggie: è vero. Si potrebbe anche usare un 'order by' nel 2 °' SELECT'. Ha solo bisogno di sapere che può ** recuperare ** qualsiasi lista di "prezzo" nel 2 ° e prendere solo il 'min' e il' max' grazie alla prima selezione. Sembra piuttosto logico. Ad ogni modo, dato che l'OP non ha risposto a @JNK non puoi sapere se 'OFFSET' è richiesto qui. – Shikiryu

Problemi correlati