Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2017
    Messaggi
    7

    Leggere e confrontare valori di una specifica colonna

    Salve a tutti, vi espongo subito il mio problema. Dato che devo eseguire operazioni su un database realizzato mediante Mysql, ho creato la connessione del mio database in java, riesco a visualizzare la tabella contenuta in esso, ora dovrei leggere i valori contenuti in una colonna "X" e confrontarli tra di loro, se i valori coincidono devo sommare i valori appartenenti ad un'altra colonna in corrispondenza dei valori di X che risultano essere uguali.
    In pratica:
    X Y
    a 2
    b 3
    a 4
    c 6
    dato che prima riga di X e terza hanno lo stesso valore devo sommare 2 con 4.
    Spero di essere stato chiaro. Grazie in anticipo.
    Allego il codice fino ad ora realizzato:

    package jdbcperson;
    import java.sql.*;
    public class Persone {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    try{
    //1. Connessione al database
    Connection myConn=DriverManager.getConnection("jdbc:mysql://localhost:3306/dbpersone", "root","pass");

    //2. Creazione oggetto Statement
    Statement myStmt=myConn.createStatement();

    //3. Esecuzione SQL query
    ResultSet myRs=myStmt.executeQuery("select * from persone");

    //4. Risultati
    while(myRs.next()){
    System.out.println(myRs.getString("Nome")+","+ myRs.getString("Citta")+","+ myRs.getString("Stato")+","+ myRs.getString("P"));
    }

    }
    catch(Exception exc){
    exc.printStackTrace();
    }
    }
    }
    Ultima modifica di Gionsno; 22-03-2017 a 09:48

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Gionsno Visualizza il messaggio
    In pratica:
    X Y
    a 2
    b 3
    a 4
    c 6
    dato che prima riga di X e terza hanno lo stesso valore devo sommare 2 con 4.
    Questo lo puoi fare a livello di SQL oppure a livello di codice Java.

    A livello di SQL puoi creare una SELECT che usa un GROUP BY specificando la colonna X e poi usando la funzione di aggregazione SUM per sommare gli Y "raggruppati" dal GROUP BY. In questo modo ottieni già un ResultSet in cui hai: a 6 / b 3 / c 6 e altro.

    Se lo fai a livello di Java, dipende, ci sono diverse strade. Se vuoi e puoi ordinare per X hai il vantaggio che tutti i valori in Y di un certo valore in X sono "vicini" e quindi non devi fare logiche troppo strane, basta che finché hai lo stesso valore in X sommi gli Y, poi quando X cambia sai che sei a "rottura" di X e quindi azzeri la sommatoria e ricominci.

    Se non puoi/vuoi ordinare per X, allora i valori in X sono tutti in ordine arbitrario e sparpagliato (potenzialmente). Quindi l'approccio valido è usare una "mappa" (Map Java), in cui associ un valore X alla sommatoria. Per ogni valore di X, vai a prendere la sommatoria nella mappa, aggiungi e risetti nella mappa.


    A tua scelta ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2017
    Messaggi
    7
    Grazie per la celere risposta. Dato che alla tabella ho dovuto aggiungere una terza colonna, ora ho:
    X Y Z
    a I 2
    a I 3
    a L 5
    b S 2
    b S 1
    c D 7
    d O 11
    c R 10
    Il mio problema ora diventa: per ogni riga devo confrontare il valore della prima e della seconda colonna se due righe hanno lo stesso valore in questi due campi, prendi il max valore nella colonna Z, tramite il Select che usa il Group By da te suggerito, ottengo la seguente tabella:
    X Y Z
    a I 3
    a L 5
    b S 2
    c D 7
    d O 11
    c R 10
    importata questa query in java, voglio sommare i valore contenuti in Z riferiti allo stesso valore in X ( per "a" ad esempio ottengo 8, per "b" ottengo 2, per "c" ottengo 17 ecc..), ma non so come accedere ai valori di X per confrontarli, puoi illuminarmi?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Gionsno Visualizza il messaggio
    per ogni riga devo confrontare il valore della prima e della seconda colonna se due righe hanno lo stesso valore in questi due campi, prendi il max valore nella colonna Z

    voglio sommare i valore contenuti in Z riferiti allo stesso valore in X ( per "a" ad esempio ottengo 8, per "b" ottengo 2, per "c" ottengo 17 ecc..)
    Idem, puoi farlo con solo SQL puro o da codice Java. Se con SQL, puoi fare una sub-select che trova il max per uguale X/Y e poi la select più esterna che raggruppa sommando per stesso X.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2017
    Messaggi
    7
    In java dovrei creare due vettori? Oppure come potrei accedere direttamente alle tabelle?.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Gionsno Visualizza il messaggio
    In java dovrei creare due vettori? Oppure come potrei accedere direttamente alle tabelle?.
    Ascolta, ti ripeto che lo puoi fare in SQL puro oppure con (un po') di codice Java. La scelta sta a te, ovviamente.

    Con SQL puro, ti basta una select con sub-select.

    Con Java, idem come detto prima, dipende da come ordini (o no) i dati. Se prendi i dati originali senza alcuna modifica/logica da SQL, puoi ordinare per X e Y, quindi a parità di X/Y tieni man mano in una variabile Java il valore max di Z e quando sei a "rottura" di X o Y hai il max di Z che puoi usare esattamente come dicevo prima tenendo una "mappa" X --> sommatoria
    Non è banale, il codice va scritto bene (ragionando, con logica!) e devi anche considerare correttamente la "rottura" dopo l'ultimo record.

    Consiglio: PRIMA prova a livello di SQL puro.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2017
    Messaggi
    7
    Grazie per l'aiuto, seguirò il tuo consiglio.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.