Visualizzazione dei risultati da 1 a 8 su 8

Discussione: 40 medie

  1. #1

    40 medie

    Ragazzi,
    ho una tabella così composta: un campo "nome" che può ripetersi in più record ed un campo "voto" associato al "nome".

    Ora io vorrei calcolare la media di tutti i voti associati al "nome" X, al "nome" Y, al "nome" Z e così via.

    Per calcolarne uno non ho problemi e faccio così:

    set rs = server.createobject("ADODB.Recordset")
    database = "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.Mappath("/mdb-database/database.mdb")
    query = "select Avg(tabella.voto) AS MediaA from tabella WHERE tabella.nome='X'"
    rs.open query,database
    media1 = rs("MediaA")
    rs.close
    set rs = nothing

    Poi, nella parte di testo che mi serve, richiamo la stringa "media1" ed è ok. Ma se volessi calcolare le singole medie per tutti i circa 40 nomi, come posso procedere? 40 query è un inumano spreco di risorse, ma non saprei come altro procedere.

    Grazie e buona giornata

  2. #2
    sinceramente non ricordo bene se access supporti tutte le caratteristiche del linguaggio SQL, ma puoi provare una query di questo tipo:

    select nome, avg(voto) as media from tabella group by nome;

    dovrebbe ritornarti un set di record composti da nome e media per ogni studente.

    Ciao

    A.
    "perchè tu possa trattenere tutta la rabbia, la forza, l'orgoglio e l'energia che ti porti dentro per poi lasciarla uscire in un'unica grande esplosione così da costruire qualcosa di veramente grosso. usa la testa e spaccagli il kulo!" Grazie Fratello.

  3. #3
    Grazie, ho provato la query in Access e funziona Ora il problema è trasportarla in ASP. Mi spiego.

    Ho una pagina in cui visualizzo altri dati degli studenti, contenuti in un'altra tabella di un altro database. La media voto sarebbe quindi un dato esterno, e devo collegarmi all'altro database (quello in cui ho creato la tabella "media").

    Una volta selezionati i dati degli studenti con questa query (database diverso)...

    query = "select * from statistiche order by nome asc, assenze desc, matricola desc"

    ...impostato il collegamento al database, come faccio ad associare un certo nome ad una certa media (inserita nella tabella "media" di un database diverso)?

    Spero di essermi spiegato bene.

    Grazie

  4. #4
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    dovresti inserire la seconda query all'interno della prima nel ciclo, usando come parametro per la seconda query il nome o l'id di uno studente ottenuto dalla prima query.

  5. #5
    Ti ringrazio, ma temo di essermi perso dopo la virgola (colpa mia, naturalmente). Un esempio?

  6. #6
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    forse è più semplice cosi:
    una sola query

    codice:
    SELECT Tabella1.nome, Avg(Tabella1.voto) AS MediaDivoto
    FROM Tabella1
    GROUP BY Tabella1.nome;
    prova un pò...

  7. #7
    Sì, questo sarebbe il modo per calcolare la media e associarla al nome (in questo database ho più record in cui si ripete ciascun nome).

    Però, oltre a quella tabella, ne avrei un'altra in un altro database, in cui sono contenute diverse informazioni (assenza, matricola...), con un record per nome. Ora io dovrei associare il record ottenuto nella nuova tabella (...AS MediaDivoto) al il record contenuto nell'altro database cui sono legate altre informazioni (assenza, matricola...).

    Faccio un esempio di ciò che ho fatto finora, tagliando le parti che non servono per questo esempio.

    ***
    Prima mi connetto al database in cui sono contenute le info su assenze etc.
    ***

    <%
    set rs = server.createobject("ADODB.Recordset")
    database = "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.Mappath("/mdb-database/stud.mdb")
    query = "select * from statistiche order by assenze desc, nome asc"
    rs.open query,database
    i = 0
    do while (not rs.eof)
    i=i+1
    strnome = rs("nome")

    ***
    Poi mi collego all'altro database (l'ho messo in un include file)
    ***

    set rs2 = server.createobject("ADODB.Recordset")
    database = "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.Mappath("/mdb-database/dbmedie.mdb")
    query = "select nome, Avg(voto) AS Media from voti where nome='"&strnome&"' group by giocatore"
    rs2.open query,database
    strmedia = rs2("media")
    rs2.close
    set rs2 = nothing

    ***
    Poi la semplice response.write
    ***

    response.write "&strmedia&" / "&rs("nome")&" / "&rs("assenze")&""
    rs.movenext
    loop
    rs.close
    set rs = nothing

    _________________________________
    Devo dire che ci siamo quasi. Gli errori sono 2, ma presumo risolvibili

    1. Uno è il formato del numero: ho medie del tipo 7,6666666666667. Posso tagliare e portarle a 7,67 (o 7,66)? E quando la media è del 5, come visualizzarla in 5,00?

    2. Un altro problema, più complesso, è quando la media non c'è (perché non ci sono voti). L'errore è questo

    ***
    ADODB.Field error '800a0bcd'

    Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

    /calcolomedia.asp, line 6
    ***


    Spero possiate essermi d'aiuto e spero di un rubare troppo tempo. Grazie

  8. #8
    Con qualche accorgimento, ho risolto. Grazie per le indicazioni.

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.