Sql eseguire una divisione fra due campi in una istruzione Sql

di pdecaro il
13 risposte

Buongiorno amici, Vi chiedo un aiuto se è possibile ottenere un campo -risultato con una divisione fra due campi già totalizzati con sum. Vi allego sql di partenza. 

SELECT DISTINCT YEAR(e1_dtfat) AS anno, SUM(e1_imene) AS imeneT,  SUM(e1_kwhmq) AS kwhmqT FROM energia where e1_cdene = "2" order  BY anno ASC

in questa sql ho esigenza di ottenere un campo risultato fra i campi già totalizzati  imeneT / kwhmqT .

Grazie a tutti

13 Risposte

  • SELECT DISTINCT 
      YEAR(e1_dtfat) AS anno, 
      SUM(e1_imene) AS imeneT,  
      SUM(e1_kwhmq) AS kwhmqT ,
      SUM(e1_imene)/SUM(e1_kwhmq)
    FROM energia where e1_cdene = "2" 
    ORDER  BY anno ASC

    comunque, quel DISTINCT in una query di questo tipo e' MOOOOOOOOOOOOOOOOOOLTO strano.

    Valuta bene che cosa stai "combinando"

  • Buonasera e grazie  del tuo contributo. Sql che ho postato funziona perfettamente , ecco i passaggi :

    SELECT DISTINCT YEAR(e1_dtfat) AS anno, SUM(e1_imene) AS imeneT,  SUM(e1_kwhmq) AS kwhmqT FROM energia WHERE e1_cdene = '2' GROUP BY anno ASC

    ecco il risultato

  • E hai provato la query proposta??

  • A parte quanto ti ha detto Oregon, sei sicuro che la divisione dei costi vada fatta per mq?

    Una sql inerente ad un condominio dovrebbe avere una join con le tabelle millesimali e con l'anagrafica unità immobiliari. Il costo va ripartito 1/2 in base al piano crescente in altezza e 1/2 in base ai millesimi.

    Come dico sempre, programmare significa conoscere un linguaggio e conoscere la materia che stai informatizzando.

  • Buongiorno attenzione non stiamo parlando di un condominio.  la query riporta il totale gas pagato per anno ed i mq per anno.

    La divisone serve a darmi un valore del costo per mq per anno.

    Grazie ancora

  • E ancora non rispondi sulla soluzione proposta... incredibile 

  • Salve, 

    ma perche' DISTINCT ??

    salutoni romagnoli
    -- 
    Andrea

  • 14/06/2025 - asql ha scritto:

    Salve, 

    ma perche' DISTINCT ??

    salutoni romagnoli
    -- 
    Andrea

    ah, scusate, l'ha chiesto anche @migliorabile...

    salutoni romagnoli
    -- 
    Andrea

  • Buongiorno , ho provato sql proposto da "migliorabile", il risultato è questo :  attenzione distinct lo uso per avere un totale per anno, in questa query ottengo solo anno 2025.  

  • Uhm... non hai risposto.

    forse quello che cerchi è questo?

    -- create
    CREATE TABLE ENERGIA (
      eId INTEGER PRIMARY KEY,
      CAMPODATA DATE NOT NULL,
      CAMPOA FLOAT NOT NULL,
      CAMPOB FLOAT NOT NULL,
      CAMPOCONDIZIONE INTEGER NOT NULL
    );
    
    -- insert
    INSERT INTO ENERGIA VALUES (0001, '2024-06-01', 100, 90, 2);
    INSERT INTO ENERGIA VALUES (0002, '2024-12-02', 120, 98, 2);
    INSERT INTO ENERGIA VALUES (0003, '2025-08-03', 110, 80, 2);
    INSERT INTO ENERGIA VALUES (0004, '2025-09-06', 140, 100, 2);
    INSERT INTO ENERGIA VALUES (0005, '2025-10-11', 105, 91, 2);
    INSERT INTO ENERGIA VALUES (0006, '2025-12-06', 115, 99, 2);
    
    -- fetch 
    SELECT * FROM ENERGIA;
    SELECT
        YEAR(CAMPODATA) AS ANNO,
        SUM(CASE WHEN CAMPOCONDIZIONE = 2 THEN CAMPOA ELSE 0 END) AS somma_condizionata1,
        SUM(CASE WHEN CAMPOCONDIZIONE = 2 THEN CAMPOB ELSE 0 END) AS somma_condizionata2,
        SUM(CASE WHEN CAMPOCONDIZIONE = 2 THEN CAMPOA ELSE 0 END)/SUM(CASE WHEN CAMPOCONDIZIONE = 2 THEN CAMPOB ELSE 0 END)
        as rapportocondizionato
    FROM
        ENERGIA
    WHERE
        CAMPOCONDIZIONE = 2
    GROUP BY
        ANNO;

    risultati:

    +-----+------------+--------+--------+-----------------+
    | eId | CAMPODATA  | CAMPOA | CAMPOB | CAMPOCONDIZIONE |
    +-----+------------+--------+--------+-----------------+
    |   1 | 2024-06-01 |    100 |     90 |               2 |
    |   2 | 2024-12-02 |    120 |     98 |               2 |
    |   3 | 2025-08-03 |    110 |     80 |               2 |
    |   4 | 2025-09-06 |    140 |    100 |               2 |
    |   5 | 2025-10-11 |    105 |     91 |               2 |
    |   6 | 2025-12-06 |    115 |     99 |               2 |
    +-----+------------+--------+--------+-----------------+
    +------+---------------------+---------------------+----------------------+
    | ANNO | somma_condizionata1 | somma_condizionata2 | rapportocondizionato |
    +------+---------------------+---------------------+----------------------+
    | 2024 |                 220 |                 188 |   1.1702127659574468 |
    | 2025 |                 470 |                 370 |   1.2702702702702702 |
    +------+---------------------+---------------------+----------------------+
  • Troppi decimali?

    SELECT
        YEAR(CAMPODATA) AS ANNO,
        SUM(CASE WHEN CAMPOCONDIZIONE = 2 THEN CAMPOA ELSE 0 END) AS somma_condizionata1,
        SUM(CASE WHEN CAMPOCONDIZIONE = 2 THEN CAMPOB ELSE 0 END) AS somma_condizionata2,
        round(SUM(CASE WHEN CAMPOCONDIZIONE = 2 THEN CAMPOA ELSE 0 END)/
        SUM(CASE WHEN CAMPOCONDIZIONE = 2 THEN CAMPOB ELSE 0 END), 4)
        as rapportocondizionato
    FROM
        ENERGIA
    WHERE
        CAMPOCONDIZIONE = 2
    GROUP BY
        ANNO;

    nel manuale: somma condizionata campi.

  • Buonasera ,  sihsandrea . 

    Grazie è proprio quello che cercavo.   

    Bravissimo

Devi accedere o registrarti per scrivere nel forum
13 risposte