Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Aiuto funzione sql

    Ciao a tutti!
    Ho un problema con una funzione in sql. Io ho una tabella strutturata così.
    id(chiave primaria), nome, accettata(true o false).

    io devo mettere 'true' nella colonna accettata solo se il numero di righe con lo stesso nome è inferiore al 30% del numero di righe totali. Quindi per esempio se in totale ho dieci righe di cui 8 righe hanno come nome giovanna e 2 righe hanno come nome marta devo mettere accettata solo alle righe con nome marta, mentre a quelle con nome giovanna no. Anzi sarebbero meglio mettere true solo alle prime 2(perchè inferiore al 30%).
    Non voglio sapere la sintassi precisa( se la sapete meglio ) ma un'idea su come va impostata. Sto usando postgresql.
    Grazie davvero e spero possiate aiutarmi che sono disperata

  2. #2

    Re: Aiuto funzione sql

    Originariamente inviato da martina_86
    Ciao a tutti!
    Ho un problema con una funzione in sql. Io ho una tabella strutturata così.
    id(chiave primaria), nome, accettata(true o false).

    io devo mettere 'true' nella colonna accettata solo se il numero di righe con lo stesso nome è inferiore al 30% del numero di righe totali. Quindi per esempio se in totale ho dieci righe di cui 8 righe hanno come nome giovanna e 2 righe hanno come nome marta devo mettere accettata solo alle righe con nome marta, mentre a quelle con nome giovanna no. Anzi sarebbero meglio mettere true solo alle prime 2(perchè inferiore al 30%).
    Non voglio sapere la sintassi precisa( se la sapete meglio ) ma un'idea su come va impostata. Sto usando postgresql.
    Grazie davvero e spero possiate aiutarmi che sono disperata
    codice:
    UPDATE TABELLA A SET ACCETTATA=TRUE WHERE 
    
    	(((SELECT COUNT(*) FROM TABELLA WHERE NOME=A.NOME)/(SELECT COUNT(*) FROM TABELLA)*)100>=30
    http://www.anobii.com/isalreadyinuse

  3. #3
    grazie della risposta..
    Nella funzione non ho però nessun input..deve essere gestito automaticamente..quindi non credo vada bene la tua soluzione..

  4. #4
    Originariamente inviato da martina_86
    grazie della risposta..
    Nella funzione non ho però nessun input..deve essere gestito automaticamente..quindi non credo vada bene la tua soluzione..
    basta che la includi in un trigger
    http://www.anobii.com/isalreadyinuse

  5. #5
    Utente di HTML.it L'avatar di ilgiovo
    Registrato dal
    Aug 2001
    Messaggi
    518
    anche io opterei per una soluzione simile a quella di isAlreadyInUse (la cui sintassi però mi sembra errata... sbaglio ? )

    update _tabella
    set accettata = 1
    from _tabella inner join (select nome from (select nome, count(id) as contatore from _tabella group by nome) a where (contatore * 100 / (select count(id) as righetotali from _tabella)) < 33) b on _tabella.nome = b.nome
    Cacca!

  6. #6
    nessuno...la funzione dovrebbe andare a leggere nella tabella i nomi..e in basi ai nomi che trova deve mettere o meno 'true' alle righe che soddifano la condizione...spero di essermi spiegato..

  7. #7
    Originariamente inviato da martina_86
    nessuno...la funzione dovrebbe andare a leggere nella tabella i nomi..e in basi ai nomi che trova deve mettere o meno 'true' alle righe che soddifano la condizione...spero di essermi spiegato..
    trigger
    http://www.anobii.com/isalreadyinuse

  8. #8
    ok..puoi dirmi qualcosa di più preciso su come lo imposto e se devo salvare i dati parizali in una vista??

  9. #9
    Originariamente inviato da martina_86
    ok..puoi dirmi qualcosa di più preciso su come lo imposto e se devo salvare i dati parizali in una vista??
    allora ti crei un trigger (puoi vedere la documentazione on line o poi chiedere qui) in cui per ogni insert lancia la query
    o la mia o quella del giovo prova quale delle due funziona meglio.


    cosi automaticamente per ogni insert avrai quel controllo e aggiornamento automatico
    http://www.anobii.com/isalreadyinuse

  10. #10
    grazie dell'aiuto ragazzi!
    ora sto provando un po'. Però per riuscire nel mio intento avrei bisogno di una funzione che crei e sostituisca una vista ogni volta che viene chiamata..
    questo è il codice della funzione che crea la vista..e non mi da nessun errore
    codice:
    create or replace function controllo_richieste(trimestre_in integer, anno_in double precision) returns integer as $$
    begin
    CREATE OR REPLACE VIEW controllo_richieste AS 
    SELECT count(*) AS numero_richieste, richieste.codice_compagnia, richieste.trimestre, extract(year from data_richiesta) AS anno
    FROM richieste
    where trimestre = trimestre_in and anno_in = anno
    GROUP BY codice_compagnia, trimestre, anno
    order by anno,trimestre;
    END;
    $$ language 'plpgsql';
    al momento della chiamata
    codice:
    select controllo_richieste(4,2010);
    mi dice:
    "ERROR: there is no parameter $1
    LINE 1: ...hiesta) AS anno FROM richieste where trimestre = $1 and $..."

    perchè??????????

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