Se SELECT SUM(amount) FROM transactions ORDER BY order LIMIT 0, 50
somma il campo amount
per i primi 50 record in una tabella, come si fa una somma di tutti i record dopo il i primi 50? In altre parole, mi piacerebbe fare qualcosa come SELECT SUM(amount) from transactions ORDER BY order LIMIT 50, *
, ma questo non funziona.Come SUM() da un offset attraverso la fine della tabella?
risposta
I documentation consigli per utilizzare un gran numero incredibile come secondo parametro a LIMIT
:
Per recuperare tutte le righe da una certa compensazione fino alla fine del set di risultati, è possibile utilizzare alcuni gran numero per la secondo parametro. Questa dichiarazione recupera tutte le righe dalla fila 96 ° per l'ultimo:
SELECT * FROM tbl LIMIT 95,18446744073709551615;
SELECT SUM(amount)
FROM (
SELECT amount
FROM transactions
ORDER BY
order
LIMIT 50, 1000000000000
) q
Nota che la query originale:
SELECT SUM(amount)
FROM transactions
ORDER BY
order
LIMIT 0, 50
non fa quello che probabilmente pensate lo fa. E 'sinonimo di questo:
SELECT a_sum, order
FROM (
SELECT SUM(amount) AS a_sum, order
FROM transactions
) q
ORDER BY
order
LIMIT 0, 50
La query interna (che normalmente fallire in qualsiasi altro motore, ma lavora a MySQL
a causa della sua sintassi estensione GROUP BY
) restituisce solo 1
record.
ORDER BY
e LIMIT
vengono quindi applicati a tale record aggregato, non ai record di transactions
.
Cosa succede se si dispone di più di 1000000000000 righe? – Pyrolistical
Qualche motivo per la sottoquestione? Sembra ridondante. – keithjgrant
@Pirolico: quindi consideri di passare a un altro motore. – Quassnoi
C'è probabilmente un modo più efficiente, ma si potrebbe eseguire una query conteggio prima, per recuperare # totale di righe nella tabella:
SELECT count(*) FROM transactions
Stuff in una variabile e utilizzare tale variabile come secondo argomento per LIMIT. Probabilmente potresti farlo come una query mysql annidata.
- 1. Aggiorna tabella con SUM da un'altra tabella
- 2. Come creare un ambiente tabella definito con la didascalia alla fine della tabella con LaTeX?
- 3. MySQL MAX da SUM
- 4. Imposta memoria come non memorizzabile attraverso la tabella PAT x86
- 5. Che cos'è un offset della query?
- 6. SELECT SUM come campo
- 7. Come stampare la struttura della tabella da postgresql?
- 8. data.table della tabella è molto diversa da data.frame della tabella
- 9. Passa attraverso le date ad eccezione dei fine settimana
- 10. Come leggere il colore da un offset di LinearGradientBrush XAML?
- 11. GROUP BY/SUM da shell
- 12. ELIMINA i dati da una tabella, unendo attraverso due tabelle
- 13. offset "grep" della stringa ascii da file binario
- 14. .OrderBy (DayOfWeek) da trattare domenica come fine della settimana
- 15. Rilevamento della collisione attraverso l'array
- 16. Cosa fa la somma della funzione integrata con sum (list, [])?
- 17. Interrompi tabella temporanea alla fine della stored procedure in MySQL
- 18. ciclo attraverso la lista a partire da un certo elemento
- 19. Come elencare le regioni in una tabella HBase attraverso la shell?
- 20. Come specificare il nome della tabella da utilizzare da DbContext
- 21. strumento per copiare file da data 'x' (partenza) offset al dato 'y' (fine) compensato
- 22. Come posso limitare la larghezza della colonna della tabella?
- 23. Come selezionare il contenuto della tabella senza distruggere la tabella?
- 24. Come evitare la dilatazione della tabella html
- 25. Perché la didascalia della tabella aumenta l'altezza della tabella?
- 26. MySQL UPDATE con SUM SELECT dalla tabella diversa
- 27. Come utilizzare @sum con CoreData
- 28. MVC da linq a sql sum
- 29. jQuery Offset errato all'aggiornamento della pagina
- 30. Spiegazione della tabella virtuale
Accettando questo, poiché si rivolge direttamente alla mia domanda, ma grazie (e +1) a @Quassnoi per aver segnalato il mio problema con 'ORDER BY', – keithjgrant
Il formato di questa risposta restituirebbe zero risultati se SUM o alcuni sono state utilizzate altre funzioni di aggregazione. Questo perché, come spiega @Quassnoi di seguito, la SUM verrà applicata ai record n. 95 - LARGE_NUMBER di una sottoquery che ha restituito solo un risultato. Quassnoi fornisce la risposta corretta alla domanda originale di seguito. – akgill