Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    168

    [MySQL]media di un valore contenuto in un numero specifico di righe

    ciao ragazzi, con la query seguente calcolo la media di tutti gli attr2 che hanno lo stesso attr1:

    select attr1, avg(attr2)
    from nome_tabella
    group by attr1

    Il mio intento però è quello di calcolare la media di 5 attr2 per volta che hanno lo stesso attr1 (quindi se ho 5 attr2 con lo stesso attr1, avrò come output 3 medie).
    Help me!

  2. #2

    Re: [MySQL]media di un valore contenuto in un numero specifico di righe

    Originariamente inviato da lilux
    Il mio intento però è quello di calcolare la media di 5 attr2 per volta che hanno lo stesso attr1 (quindi se ho 5 attr2 con lo stesso attr1, avrò come output 3 medie).
    immagino "15 attr2" e non 5... e comunque, di questi 15, i gruppi di 5 li si prende a casaccio o c'è un qualche criterio?

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    168
    No, ti faccio un esempio:

    id attr1 attr2
    1 111 2
    2 111 5
    3 111 8
    4 111 4
    5 111 2
    6 111 5
    7 111 9
    8 111 0
    9 111 2
    10 111 4
    11 111 3
    12 111 8
    13 111 2
    14 111 5
    15 111 9

    voglio ottenere:

    avg(attr2)
    4.2 -> (2+5+8+4+2)/5
    4 -> (5+9+0+2+4)/5
    5.4 ->(3+8+2+5+9)/5

    I gruppi di 5 vanno presi sequenzialmente.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150
    E' una specie di "paginazione" su una tabella.

    Potresti usare la clausola LIMIT, dove il limite destro e' sempre un multiplo di 5 (partendo da 0) e poi fare una SELECT UNION delle N-viste-pagine-tabelle (chiamale come vuoi) risultanti.

    Magari c'e' un modo piu' semplice, ma prendi il mio intervento come spunto, anche perche' sto uscendo dal lavoro e non posso postare un esempio.

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    set @attr1 = -1,@num = 1;
    select attr1,avg(attr2) as media from (
    	select *,@num := if(@attr1 = attr1, @num + 1, 1) as riga,
    	@attr1 := attr1 as i from (
    		select id,attr1,attr2 from tabella order by attr1,id
    		) as t 
    	) as t2
    group by attr1,ceil(riga/5)
    order by attr1,id

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    168
    grazie nicola75ss

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.