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

    problemi con interrogazioni SQL

    Ho problemi con una query in sql.

    Dovrei indicare il nome di coloro che hanno una media mensile superiore al doppio della media mensile delle ore calcolata su tutti i viaggiatori.

    I dati della tabella sono:

    create table clienti(
    nome varchar(10),
    cognome varchar(10),
    cf varchar(16),
    ore_volo numeric(10) primary key
    );

    insert into clienti values( 'lucia', 'dolgetta', 'dlglcu86e62l120y', 450);
    insert into clienti values( 'sandro', 'tortora', 'trtsdr86p02f912w', 250);
    insert into clienti values( 'lucia', 'dolgetta', 'dlglcu86e62l120y', 651);
    insert into clienti values( 'sandro', 'tortora', 'trtsdr86p02f912w', 420);
    insert into clienti values( 'licia', 'iannuzzi', 'nnzflc85h60a509t', 112);
    insert into clienti values( 'teresa', 'orza', 'rzotrs86665i438z', 80);
    insert into clienti values( 'licia', 'iannuzzi', 'nnzflc85h60a509t', 90);
    insert into clienti values( 'orlando', 'ippolito', 'pplrnd86d19a509u', 111);
    insert into clienti values( 'teresa', 'orza', 'rzotrs86665i438z', 432);
    insert into clienti values( 'sandro', 'tortora', 'trtsdr86p02f912w', 444);

    Ho provato con le View ma purtroppo non funziona.

    Grazie in anticipo

  2. #2

    re

    select nome,cognome,cf ,ore_volo
    form(select nome,cognome,cf ,ore_volo,avg(ore_volo) as media
    from clienti )
    where ore_volo>(2*media)

    ciao!

  3. #3
    Non riesco a capire perchè mi da errore

    grazie cmq sei stato gentilissimo....


  4. #4
    Ho risolto il problema con le view.....
    Ora ne avrei un altro posso??

    CREATE TABLE aeroporto (
    sigla char(6) primary key,
    nome char(20),
    nazione char(10)
    );

    CREATE TABLE volo(
    sigla int(10) primary key,
    data_ora_part datetime,
    data_ora_arr datetime,
    sigla_aeroporto_arrivo char(10) not null
    REFERENCES AEROPORTO (sigla),
    sigla_aeroporto_partenza char(10) not null
    REFERENCES AEROPORTO (sigla)
    );


    CREATE TABLE cliente_internet(
    sigla_volo int(10)
    REFERENCES VOLO (sigla),
    nome_utente char(12) not null,
    password varchar(10) not null,
    nome char(10),
    cognome char(10),
    ore_volo numeric(10) primary key
    );


    Dovrei indicare i viaggiatori che usano almeno nel 75% dei casi la stessa rotta

    :master:

  5. #5

    re

    io potrei anche scrivere la query per risolvere...o almeno tantarci..:-) ma di sicuro non ti aiuterei.. risolviamo insieme...del genere scrivi quello che faresti tu..eventualmente sbagli ti corrego spiegandoti il perche'....credo sia piu' conveniente imparare che trovarsi sempre nella m.. e dipendere dagli altri...ciao!

  6. #6
    Beh si certo....i linguaggi di programmazione non sono il mio forte... mi serve per un esame.....e non c'è stato neppure spiegato.....e cosi ho cercato di aiutarmi un pò con i manuali e su internet....e le uniche soluzioni che trovo sono quelle di andare a creare delle view che posso poi interrogare.

    In questo caso però credo si dovrebbe fare la conta di tutte le rotte (sigla_volo) e vedere chi cliente utilizza la rotta almeno per il 75% dei casi.


    Ho pensato di fare:
    select nome,cognome, count(*) as prenotazioni_cliente_per_rotta
    from cliente_internet,prenotazione
    where nome_utente_cliente_internet=nome_utente and
    prenotazioni_cliente_per_rotta >= (

    select (count(*) as prenotazioni_per_cliente)*0.75 as percentale_richiesta
    from cliente_internet , prenotazione
    where nome_utente_cliente_internet=nome_utente
    group by nome_utente

    )
    group by sigla_volo

    ma mi da un errore.....e nn capisco dove sbaglio.....

  7. #7
    questo è il data base


    CREATE TABLE aeroporto (
    sigla char(6) primary key,
    nome char(20),
    nazione char(10)
    );


    insert into aeroporto values( 'LEGT','Getafe','Spagna');
    insert into aeroporto values( 'LFBF','Francazal','Francia');
    insert into aeroporto values( 'LIRN','Napoli_Capodichino','Italia');
    insert into aeroporto values( 'LIML','Linate','Italia');
    insert into aeroporto values( 'LIRF','Fiumicino','Italia');
    insert into aeroporto values( 'LS4','Kagiswil','Svizzera');
    insert into aeroporto values( 'LXGB','North Front','Gibilterra');
    insert into aeroporto values( 'LGAT','Hellinikon','Grecia');
    insert into aeroporto values( 'LOGM','Mariazell','Austria');
    insert into aeroporto values( 'LMMG','Gozo_Hel','Malta');




    CREATE TABLE volo(
    sigla int(10) primary key,
    data_ora_part datetime,
    data_ora_arr datetime,
    sigla_aeroporto_arrivo char(10) not null
    REFERENCES AEROPORTO (sigla),
    sigla_aeroporto_partenza char(10) not null
    REFERENCES AEROPORTO (sigla)
    );


    insert into volo values( 0002, '2008-09-20', '2008-09-20', 'LEGT', 'LFBF' );
    insert into volo values( 0055, '2008-09-21', '2008-09-21', 'LXGB', 'LGAT' );
    insert into volo values( 0582, '2008-09-23', '2008-09-24', 'LMMG', 'LMMG' );
    insert into volo values( 0003, '2008-10-02', '2008-10-03', 'LIRN', 'LOGM' );
    insert into volo values( 0004, '2008-10-05', '2008-10-05', 'LS4', 'LGAT' );
    insert into volo values( 0032, '2008-10-06', '2008-10-06', 'LEGT', 'LMMG' );
    insert into volo values( 0011, '2008-10-10', '2008-10-11', 'LIML', 'LS4' );
    insert into volo values( 0154, '2008-10-25', '2008-10-25', 'LMMG', 'LMMG' );
    insert into volo values( 0382, '2008-10-25', '2008-10-26', 'LOGM', 'LIRN' );
    insert into volo values( 0089, '2008-10-27', '2008-10-27', 'LXGB', 'LGAT' );





    CREATE TABLE velivolo (
    num_serie varchar(10) primary key,
    ore_volo numeric(5),
    modello varchar(15),
    num_posti int(10)
    );


    insert into velivolo values( 'ATR42320', 330, 'Aerospatiale', 50 );
    insert into velivolo values( 'OH57', 650, 'Kiowa', 80 );
    insert into velivolo values( 'A37', 480, 'Dragonfly', 95 );
    insert into velivolo values( 'H46', 330, 'Sea_Knight', 120 );
    insert into velivolo values( 'AC2A', 642, 'Commander_112A', 100 );
    insert into velivolo values( 'AP45', 521, 'Super', 80 );
    insert into velivolo values( 'TC19', 286, 'Sportsman',75 );
    insert into velivolo values( 'AT42', 215, 'ATR', 100 );
    insert into velivolo values( 'BN2', 190, 'Islander', 110 );
    insert into velivolo values( 'DC9Q', 615, 'Trader', 90 );




    CREATE TABLE impiega (
    sigla_volo int(10)
    REFERENCES VOLO (sigla),
    num_serie_velivolo varchar(10)
    REFERENCES VELIVOLO (num_serie),
    primary key (sigla_volo,num_serie_velivolo)
    );


    insert into impiega values( 0003, 'H46' );
    insert into impiega values( 0011, 'OH57' );
    insert into impiega values( 0154, 'AC2A' );
    insert into impiega values( 0089, 'DC9Q' );
    insert into impiega values( 0002, 'TC1' );
    insert into impiega values( 0055, 'A37_320');
    insert into impiega values( 0382, 'BN2' );
    insert into impiega values( 0032, 'AT42' );
    insert into impiega values( 0004, 'ATR42320' );
    insert into impiega values( 0582, 'AP45' );



    CREATE TABLE cliente_internet(
    sigla_volo int(10)
    REFERENCES VOLO (sigla),
    nome_utente char(12) not null,
    password varchar(10) not null,
    nome char(10),
    cognome char(10),
    ore_volo numeric(10) primary key
    );

    insert into cliente_internet values( 0154, 'Sassy','fiat500','Salvatore','Dolgetta', 56);
    insert into cliente_internet values( 0004, 'Sandruccio','paganese','Sandro','Tortora', 8);
    insert into cliente_internet values( 0382, 'Army','francesco','Armandina','Sperlonga', 12);
    insert into cliente_internet values( 0011, 'Terry','vasco','Teresa','Orza', 9);
    insert into cliente_internet values( 0032, 'Millo','sarnese','Michele','Orza', 24);
    insert into cliente_internet values( 0002, 'Lucy','tartaruga','Lucia','Dolgetta', 2);
    insert into cliente_internet values( 0089, 'Aurorablu','spazio','Dolores','Pappacena', 18);
    insert into cliente_internet values( 0089, 'Millo','sarnese','Michele','Orza', 71);
    insert into cliente_internet values( 0055, 'Lucy','tartaruga','Lucia','Dolgetta', 45);
    insert into cliente_internet values( 0011, 'Sassy','fiat500','Salvatore','Dolgetta', 20);
    insert into cliente_internet values( 0382, 'Sandruccio','paganese','Sandro','Tortora', 15);
    insert into cliente_internet values( 0004, 'Terry','vasco','Teresa','Orza', '3');
    insert into cliente_internet values( 0003, 'Sassy','fiat500','Salvatore','Dolgetta', 35);
    insert into cliente_internet values( 0154, 'Terry','vasco','Teresa','Orza', '5');
    insert into cliente_internet values( 0055, 'Army','francesco','Armandina','Sperlonga', 10);
    insert into cliente_internet values( 0004, 'Aurorablu','spazio','Dolores','Pappacena', 7);



    CREATE TABLE prenotazione (
    codice varchar(10) primary key,
    tariffa numeric(10),
    sigla_volo int(10) not null
    REFERENCES VOLO (sigla),
    nome_utente_cliente_internet char(10) not null
    REFERENCES CLIENTE_INTERNET (nome_utente)
    );


    insert into prenotazione values( 'a32b5', '125.30', 0002, 'Aurorablu' );
    insert into prenotazione values( 'c35s3', '80.50', 0055, 'Lucy' );
    insert into prenotazione values( 's47g6', '50.20', 0004, 'Ferdy' );
    insert into prenotazione values( 'b32e5', '180.70', 0032, 'Sandruccio' );
    insert into prenotazione values( 'w25d6', '280.10', 0582, 'Pelly' );
    insert into prenotazione values( 't88t3', '89.15', 0002, 'Army' );
    insert into prenotazione values( 'r45g7', '450.00', 0003, 'Terry' );
    insert into prenotazione values( 'm25d5', '125.30', 0011, 'ilsogno' );
    insert into prenotazione values( 'w4fp4', '50.20', 0089, 'Millo' );
    insert into prenotazione values( 'h71m2', '75.00', 0154, 'Sassy' );

  8. #8

    re

    correggi group by inserendo tutti i campi che fanno parte dell'aggregazione:

    select nome,cognome, count(*) as prenotazioni_cliente_per_rotta
    from cliente_internet,prenotazione
    where nome_utente_cliente_internet=nome_utente and
    prenotazioni_cliente_per_rotta >= (

    select (count(*) as prenotazioni_per_cliente)*0.75 as percentale_richiesta
    from cliente_internet , prenotazione
    where nome_utente_cliente_internet=nome_utente
    //qui non va

    )
    group by nome,cognome //capito?
    count(*) che senso ha? cosi facendo fai un conto di tutte le righe della tabella selezionata a che ti serve?

  9. #9
    Si...capito....ma non riesco cmq ad ottenere la query......e non capisco dove sta l'inceppo

    grazie .....

  10. #10
    allora:
    1 devi contare tutte le rotte per ogni singolo cliente
    2 per ogni cliente, per ogni sua singola rotta, devi calcolare il valore percentuale
    3 crea una query che abbia la condizione >= 75

    select cliente,rotta
    from(select cliente,rotta,(num/sum(num)*100 as percent
    from(select cliente,rotta,count(rotta) as num
    from...)
    where percent>=75

    dovrebbe andare
    ciao!

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.