+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

[SQL]Consiglio sulla risoluzione di una query

  1. #1
    L'avatar di Fox
    Fox
    Fox non è in linea Scolaretto
    Ciao,

    Oggi mi si è chiesto di implementare in SQL la seguente query:
    "Scelto un Reparto, realizzare una query che calcoli il numero di libri “Da non perdere” ed il numero di libri “I più venduti” con i relativi dettagli"

    In breve il problema riguardava la gestione di un negozio di libri online. Il negozio era diviso in reparti(architettura e urbanistica, arte, classici greci e latini, cucina e casa, diritto, economia e management...).Ogni reparto era a sua volta organizzato in categorie('Da non perdere','I più venduti','Ultimi arrivi'...).Ciascuna categoria a sua volta conteneva determinati libri(Titolo,Autore,Prezzo,Editore...).

    Tornando alla query mi chiedevo com'era possibile implementarla, cioè come si può calcolare il numero di libri(count(*)) per quelle due categorie e contemporaneamente stampare i dettagli di ciascun libro senza ripetere ovviamente il conteggio su tutte le righe?Mi sembra stano.

    Io per risolverla sono andato fuori traccia. Infatti invece di una o implementato 2 query separate, una per la visualizzazione dei dettagli e una per il conteggio.

    Voi che ne pensate?Era possibile risolverla con un'unica query?

    Ciao.
    Ultima modifica di Fox; 21-06-2007 19:43 

  2. Quote Originariamente inviato da Fox Visualizza il messaggio
    Ciao,
    ..........
    Voi che ne pensate?Era possibile risolverla con un'unica query?

    Ciao.
    Ciao Fox,

    suppongo che il compito sia teorico e che non si riferisca a nessun dbms
    in particolare, ma ciò nonostante - se posso permettermi - suggerirei di postare
    comunque le :

    - Create table (con le PK)
    - le insert into per creare dei dati di prova
    - ed il risultato desiderato

    in modo da faciltare il compito a chi voglia risponderti;

    ... ovviamente ciò non vuol dire che personalmente sia in grado di risolverlo
    o che abbia il tempo di farlo nè tanto meno che quanto suggerito
    sia strettamente necessario per la soluzione del problema;

    ... come già detto è solo un suggerimento - forse inutile - e nulla di più.
    ℹ️ Leggi di più su sspintux ...

  3. #3
    L'avatar di Fox
    Fox
    Fox non è in linea Scolaretto
    Ciao sspintux,

    come avevo già anticipato
    Quote Originariamente inviato da me
    Il negozio era diviso in reparti(architettura e urbanistica, arte, classici greci e latini, cucina e casa, diritto, economia e management...).Ogni reparto era a sua volta organizzato in categorie('Da non perdere','I più venduti','Ultimi arrivi'...).Ciascuna categoria a sua volta conteneva determinati libri(Titolo,Autore,Prezzo,Editore...).
    facendo uno schemino molto veloce:
    Reparto(IdRep,NomeRep,...)
    Organizzazione(IdRep,IdCat)
    Categoria(IdCat,NomeCat,...)
    Libro(IdLibro,Titolo,Autore,Prezzo....,CodCat)

    comunque non so se avere i dati precisi posso aiutare poi molto. Quando infatti ho letto la traccia della query, prima ancora di realizzare il modello concettuale, mi è apparsa fin da subito strana, perchè a mia avviso richiedeva due cose incociliabili. Infatti per eseguire il conteggio bisognava raggruppare(GROUP BY) per nome categoria(Da non perdere,I più venduti), ma una volta raggruppati per categoria non era più possibile vedere i dettagli dei singoli libri di ciascuna categoria.

    Quello che volevo sapere è se sono io che non sono riuscito a risolvere la traccia con un'unica query o effettivamente era la traccia piuttosta ambigua, tanto da poterla dividere in due query distinte.

    Ciao.

  4. Quote Originariamente inviato da Fox Visualizza il messaggio
    Ciao sspintux,

    .............
    Quello che volevo sapere è se sono io che non sono riuscito a risolvere la traccia con un'unica query o effettivamente era la traccia piuttosta ambigua, tanto da poterla dividere in due query distinte.

    Ciao.
    boh! .... forse si voleva una cosa del genere

    -- scritta per sql server
    use tempdb
    go
    
    create table Cat(IDCat int ,DesCat varchar(20))
    insert into cat values(1,'Cat1')
    insert into cat values(2,'Cat2')
    insert into cat values(3,'Cat3')
    
    create table Lib(IDLib int ,IDCat int ,DettLib varchar(20))
    insert into Lib values(1,1,'DettLib1')
    insert into Lib values(2,1,'DettLib2')
    insert into Lib values(3,2,'DettLib3')
    insert into Lib values(4,3,'DettLib4')
    insert into Lib values(5,3,'DettLib5')
    insert into Lib values(6,3,'DettLib6')
    go
    
    Select L.IDCat,C.DesCat,q1.NumLib,l.IDLib,l.DettLib 
    from
    Lib as L inner join  
    (select IDCat,Count(*) as NumLib from Lib where idcat in (1,3) group by  IDCat ) as q1
    on L.IdCat=q1.idcat
    Inner join Cat as C on L.IDCat=c.idcat
    
    drop table cat
    drop table lib
    
    risultato
    
    IDCat-DesCat-NumLib-IDLib-DettLib
    ------------------------------------------
    1	Cat1	2	1	DettLib1
    1	Cat1	2	2	DettLib2
    3	Cat3	3	4	DettLib4
    3	Cat3	3	5	DettLib5
    3	Cat3	3	6	DettLib6
    
    ℹ️ Leggi di più su sspintux ...

  5. #5
    L'avatar di Fox
    Fox
    Fox non è in linea Scolaretto
    Ciao sspintux,
    innanzitutto devo ringraziarti per il disturbo nell'avermi postato quel codice.


    Quote Originariamente inviato da me
    Tornando alla query mi chiedevo com'era possibile implementarla, cioè come si può calcolare il numero di libri(count(*)) per quelle due categorie e contemporaneamente stampare i dettagli di ciascun libro senza ripetere ovviamente il conteggio su tutte le righe?Mi sembra stano.
    Anche io avevo proposto una soluzione del genere, col conteggio su ciascuna riga ma non mi è stata accettata in quanto ridondante, ecco perchè sono sempre più convinto che la traccia non è stata formulata bene.

    Ok, grazie ancora sspintux, ciao.

  6. Quote Originariamente inviato da Fox Visualizza il messaggio
    Ciao sspintux,
    innanzitutto devo ringraziarti per il disturbo nell'avermi postato quel codice.




    Anche io avevo proposto una soluzione del genere, col conteggio su ciascuna riga ma non mi è stata accettata in quanto ridondante, ecco perchè sono sempre più convinto che la traccia non è stata formulata bene.

    Ok, grazie ancora sspintux, ciao.
    .... non vorrai mica lasciarci con questa curiosità

    P.S.
    forse voleva che si usasse qualche istruzione tipo COMPUTE BY,
    ma sinceramente non so dirti quanto sia standard
    ℹ️ Leggi di più su sspintux ...

  7. #7
    L'avatar di Fox
    Fox
    Fox non è in linea Scolaretto
    Quote Originariamente inviato da sspintux Visualizza il messaggio
    .... non vorrai mica lasciarci con questa curiosità
    Allora guardando la soluzione erano effettivamente 2 le query: una che contava i vari libri per categoria ed un'altra che visualizzava i dettagli. Quindi era la traccia non formulata bene.

    Ciao.

  8. Quote Originariamente inviato da Fox Visualizza il messaggio
    Allora guardando la soluzione erano effettivamente 2 le query: una che contava i vari libri per categoria ed un'altra che visualizzava i dettagli. Quindi era la traccia non formulata bene.

    Ciao.
    Cioa Fox , grazie per la risposta ;

    ... volendo arrampicarsi sugli specchi e giusto
    per il gusto dello smanettamento demenzial-domenicale

    (con gli stessi dati di un post precedente)

    select IDCat,
           TipoRecord, 
           (Case Tiporecord when 'TotLib-->' then NumLib else q1.IDLib end) as Num_ID_Lib,
           q1.DettLib 
    from
    (
    select IDCat,'TotLib-->' as TipoRecord,  0 as IDLib, count(*) as NumLib,'--------' as DettLib  from Lib group by idcat 
    UNION ALL
    Select  IDCat, 'DettLib : ' ,IDLib, 0 , DettLib from Lib
    ) as q1
    order by q1.idcat,q1.TipoRecord asc
    
    risultato
    
    IDCat-TipoRecord- Num_ID_Lib- DettLib
    -------------------------------------------------
    1	DettLib : 	1	DettLib1
    1	DettLib : 	2	DettLib2
    1	TotLib-->	2	--------
    2	DettLib : 	3	DettLib3
    2	TotLib-->	1	--------
    3	DettLib : 	4	DettLib4
    3	DettLib : 	5	DettLib5
    3	DettLib : 	6	DettLib6
    3	TotLib-->	3	--------
    
    ℹ️ Leggi di più su sspintux ...

  9. #9
    L'avatar di Fox
    Fox
    Fox non è in linea Scolaretto
    Quote Originariamente inviato da sspintux Visualizza il messaggio
    Cioa Fox , grazie per la risposta ;

    ... volendo arrampicarsi sugli specchi e giusto
    per il gusto dello smanettamento demenzial-domenicale

    (con gli stessi dati di un post precedente)

    select IDCat,
           TipoRecord, 
           (Case Tiporecord when 'TotLib-->' then NumLib else q1.IDLib end) as Num_ID_Lib,
           q1.DettLib 
    from
    (
    select IDCat,'TotLib-->' as TipoRecord,  0 as IDLib, count(*) as NumLib,'--------' as DettLib  from Lib group by idcat 
    UNION ALL
    Select  IDCat, 'DettLib : ' ,IDLib, 0 , DettLib from Lib
    ) as q1
    order by q1.idcat,q1.TipoRecord asc
    
    risultato
    
    IDCat-TipoRecord- Num_ID_Lib- DettLib
    -------------------------------------------------
    1	DettLib : 	1	DettLib1
    1	DettLib : 	2	DettLib2
    1	TotLib-->	2	--------
    2	DettLib : 	3	DettLib3
    2	TotLib-->	1	--------
    3	DettLib : 	4	DettLib4
    3	DettLib : 	5	DettLib5
    3	DettLib : 	6	DettLib6
    3	TotLib-->	3	--------
    
    Ciao sspintux,
    interessante quel frammento di codice che hai postato, al momento non posso testarlo, volevo chiedere se tu invece l'avevi già provato e su quale dbms. Grazie.

  10. Quote Originariamente inviato da Fox Visualizza il messaggio
    Ciao sspintux,
    ...........
    volevo chiedere se tu invece l'avevi già provato
    ....
    Ciao Fox,

    Sì ... non dispongo della pazienza necessaria per scrivere il risultato a mano
    (i dati e la struttura della tabella Lib li trovi in un post precedente)

    Quote Originariamente inviato da Fox Visualizza il messaggio
    ....su quale dbms.
    Sql Server 2005

    ....ma sono moderatamente ottimista sul fatto che si possa adattare
    anche a molti altri tipi di dbms ( per chico_ : MySQl <=4.? ....no grazie )
    pur dovendone adeguare la sintassi.
    Ultima modifica di sspintux; 24-06-2007 19:23  Motivo: aggiunta per chico_ :)
    ℹ️ Leggi di più su sspintux ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Query di accodamento sulla stessa tabella
    Da paoloderigo nel forum Microsoft Word
    Risposte: 8
    Ultimo Post: 18-02-2015, 18:58
  2. Risposte: 18
    Ultimo Post: 12-02-2014, 13:35
  3. Risposte: 3
    Ultimo Post: 27-11-2009, 13:16
  4. Risposte: 1
    Ultimo Post: 18-01-2009, 19:43
  5. Access e criteri sulla query
    Da Stellina56 nel forum Microsoft Access
    Risposte: 2
    Ultimo Post: 08-09-2006, 12:39