Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171

    Problema postgresql e order by

    salve .
    e da 2 giorni che giro su internet per trovare una soluzione ma ancora non ho capito il problema.

    sto facendo una semplice query e dovrei usare una group by per raggruppare tutti i dati uguali.

    la tabella è composta cosi:

    id_dati_segnale (PK)
    anno
    sigla
    posizione
    misura

    la query che voglio fare è questa:

    Codice PHP:

    $qry 
    "SELECT  * FROM dati_segnale  GROUP BY anno ";
            
    $result pg_query($qry) or die ("Errore nella query"$qry "\n" pg_result_error()); 
    e mi da questo errore


    Warning: pg_query(): Query failed: ERROR: column "dati_segnale.id_dati_segnale" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT * FROM dati_segnale GROUP BY anno ^

    non capisco cosa vuole

  2. #2
    Quote Originariamente inviata da processore Visualizza il messaggio
    salve .
    e da 2 giorni che giro su internet per trovare una soluzione ma ancora non ho capito il problema.

    sto facendo una semplice query e dovrei usare una group by per raggruppare tutti i dati uguali.

    la tabella è composta cosi:

    id_dati_segnale (PK)
    anno
    sigla
    posizione
    misura

    la query che voglio fare è questa:

    Codice PHP:

    $qry 
    "SELECT  * FROM dati_segnale  GROUP BY anno ";
            
    $result pg_query($qry) or die ("Errore nella query"$qry "\n" pg_result_error()); 
    e mi da questo errore


    Warning: pg_query(): Query failed: ERROR: column "dati_segnale.id_dati_segnale" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT * FROM dati_segnale GROUP BY anno ^

    non capisco cosa vuole
    ciao,

    in sql quado fai una query con raggruppamento, i campi che non compaiono nel group by devono apparire nella select accompagnati da funzioni di aggregazione (max,min,ecc...)

    quindi tu fai group by anno ma i campi quali id_dati_segnale non hanno la funzione di aggregazione...

    tu che campi vuoi stampare nella select?

    Per info, e' sconsigliato l'uso di select * per ragioni di performance, sarebbe meglio scrivere esplicitamente i nomi dei campi
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171
    ciao grazie per la risposta

    scusa mi sono dimenticato di scrivere che nella tabella c'è pure il campo nome.

    io devo stampare anno e nome, se ci sono diversi dati con lo stesso anno devo raggruppare .

    mi puoi fare un esempio di come fare sta quesry grazie

  4. #4
    ad esempio un modo puo essere questo

    SELECT anno,max(nome) FROM dati_segnale GROUP BY anno
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171
    ho fatto cosi
    Codice PHP:

    $qry 
    "SELECT anno, max(operatori), max(mese), max(giorno) FROM dati_segnale  GROUP BY anno "
    perche su anno devo stampare anno mese e giorno.

    pero non funziona.
    o meglio mi stampa solo anno mentre i campi operatori mese e giorno
    mi dice
    Undefined index: operatori

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171
    forse ho risolto cosi

    Codice PHP:
    $qry "SELECT anno, max (operatori) as operatori , max (mese) as mese, max(giorno) as giorno  FROM dati_segnale  GROUP BY anno "

    grazie mille il tuo aiuto è sempre perfetto

  7. #7
    Quote Originariamente inviata da processore Visualizza il messaggio
    .

    io devo stampare anno e nome, se ci sono diversi dati con lo stesso anno devo raggruppare .


    su anno devo stampare anno mese e giorno
    deciditi
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  8. #8
    Quote Originariamente inviata da processore Visualizza il messaggio
    forse ho risolto cosi

    Codice PHP:
    $qry "SELECT anno, max (operatori) as operatori , max (mese) as mese, max(giorno) as giorno  FROM dati_segnale  GROUP BY anno "

    grazie mille il tuo aiuto è sempre perfetto
    di niente... Alla prossima
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    171
    scusa una curiosità
    prima hai detto che è piu performante mettere i dati nella select invece dell'asterisco.
    ma se uno deve prendere tutti i dati della tabella non è uguale mettere * invece dei dati ? oppure è sempre consigliato mettere i dati ?

  10. #10
    Per farla breve diciamo che il dbms fa un po piu fatica quando vede * rispetto a quando vede i nomi dei campi perche' deve compiere qualche azione in piu'.

    dunque se si ha la possibilita' e' meglio mettere esplicitamente il nome dei campi in select.

    Ovviamente se la tabella ha pochi record non si nota il vantaggio, il discorso vale in generale
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

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.