Dubbio sul risultato di questo esercizio

di il
10 risposte

Dubbio sul risultato di questo esercizio

Salve , ho un dubbio con questo esercizio , nel senso che ho queste tabelle

Aziende(PIVA,Denominazione)

PIVA DENOMINAZIONE
111 Parmalat
222 Zucchetti


Consulenti(PIVA,CF, DataAss, Retribuzione)

PIVA CF dataAss Retribuzione
111 SLV 11/01/2013 1000
111 PNG 12/04/2012 2000
222 RCR 18/02/2012 4000
111 SPG 15/05/2012 1000
222 VVC 14/06/2011 2000




e devo stabilire il risultato della seguente query:
SELECT T.Retribuzione, COUNT(*)
FROM Aziende, (SELECT CF, Retribuzione FROM Consulenti) T

il risultato che ho trovato è


T.Retribuzione |COUNT(*)
1000 | 4
2000 | 4
4000 | 2

però non non c'è il distinct nel "select t.retribuzione" , non capsico perchè elimino i valori doppi in retribuzione e quindi sommo il del count che è 2! io avrei avrei emsso tutti i valori in t.retribuzione , ripetendo in count sempre il 2 ...sbaglio io?

10 Risposte

  • Re: Dubbio sul risultato di questo esercizio

    Ho un dubbio anche su questa Query


    Contribuenti (nome , cognome ,codicefiscale)
    Tasse (data , codicefiscale, nome tassa , importo)


    L esercizio mi chiede:
    Visualizzare il nome delle tasse che hanno riscosso un importo medio minore Dell importo medio complessivo

    So che quando c é il Group by é consigliabile usare l having

    ma se mettessi così la Quero andrebbe bene?


    Select nome tassa
    From tasse
    Where (select nome tassa, avg (importo)
    From tasse
    Group by nome tassa)
    <

    (Select avg (importo)
    From tasse)

    Group by nome tassa


    Grazie in anticipo
  • Re: Dubbio sul risultato di questo esercizio

    Ciao! Per quanto riguarda la prima domanda per avere il risultato che indichi probabilmente nella query c'è anche un "GROUP BY T.Retribuzione", altrimenti verrebbe mostrata solamente una riga contenente una retribuzione ed il conteggio di tutte le righe (ovvero 10, perché stai facendo un prodotto cartesiano fra le 2 tabelle).

    Una cosa che ti ho visto fare in tutte le domande che hai posto è la seguente:
    
    SELECT *
    FROM tabella1, tabella2
    
    Una query di questo tipo è un prodotto cartesiano, ovvero prende tutte le righe della tabella1 e le "mescola" con tutte le righe della tabella 2. Ad esempio la query "SELECT *
    FROM Aziende, (SELECT CF, Retribuzione FROM Consulenti) T" restituisce il seguente risultato:
    
    |111|Parmalat|PNG|2000
    |222|Zucchetti|PNG|2000
    |111|Parmalat|RCR|4000
    |222|Zucchetti|RCR|4000
    |111|Parmalat|SLV|1000
    |222|Zucchetti|SLV|1000
    |111|Parmalat|SPG|1000
    |222|Zucchetti|SPG|1000
    |111|Parmalat|VVC|2000
    |222|Zucchetti|VVC|2000
    
    Una cosa che, probabilmente, avrebbe più senso sarebbe fare un JOIN, ovvero prendere le sole righe che condividono gli stessi valori su un campo. Ad esempio la query "SELECT *
    FROM Aziende JOIN Consulenti ON Aziende.PIVA = Consulenti.PIVA" restituisce:
    
    |111|Parmalat|111|PNG|2012-04-12|2000
    |111|Parmalat|111|SLV|2013-01-11|1000
    |111|Parmalat|111|SPG|2012-05-15|1000
    |222|Zucchetti|222|RCR|2012-02-18|4000
    |222|Zucchetti|222|VVC|2011-06-14|2000
    
  • Re: Dubbio sul risultato di questo esercizio

    gio8890 ha scritto:


    So che quando c é il Group by é consigliabile usare l having
    Non è vero, dipende da quello che devi fare.
    La clausola WHERE si applica alle singole righe della tabella, la HAVING si applica al gruppo! Quindi fanno 2 cose ben diverse..

    Ritornando alla tua domanda, la query che hai postato è sbagliata proprio da un punto di vista sintattico, cioè se anche provi ad eseguirla ti darà un errore. In particolare la clausola where è errata (cerchi di confrontare se 2 valori [di cui uno è una stringa presumibilmente] sono minori di un valore..).
  • Re: Dubbio sul risultato di questo esercizio

    Grazie mille!!!
  • Re: Dubbio sul risultato di questo esercizio

    Posso chiedere un ultima delucidazione? Che differenza c 'é a livello "logico" tra le subquery nel from e quelle nel where? Se metto una subquery nel from mi aspetto di mettere il risultato nel select generale cioé di proiettarne il risultato no? É la sua unica funzione?grazie per la pazienza , mi accordo che faccio davvero fatica facendo gli esercizi a interpretare ciò che gli esercizi mi chiedono in particolare quando ci sono le sub Query di mezzo
  • Re: Dubbio sul risultato di questo esercizio

    Nella clausola WHERE metti una o più condizioni, nella clausola FROM specifichi delle tabelle.
    Di conseguenza una subquery nella FROM ti crea una "sotto-tabella" dalla quale andrai a prelevare dei dati. Ad esempio in questa query "SELECT T.Retribuzione, COUNT(*)
    FROM Aziende, (SELECT CF, Retribuzione FROM Consulenti) T ", la subquery crea una tabella contenente le colonne CF e Retribuzione a partire dalla tabella Consuelenti. Per vedere meglio questa cosa prova ad eseguire la seguente query:
    
    "SELECT T.*
    FROM (SELECT CF, Retribuzione FROM Consulenti) T
    
    Vedrai che ti usciranno tutte le righe della tabella Consulenti, ma con i soli campi CF e Retribuzione.

    Una subquery nella clausola WHERE, invece, esprime una condizione, per cui mostrerai solo quelle righe che la soddisfano. Ad esempio supponi di avere la seguente tabella:
    
    +--------+-------+
    | ItemID | Price |
    +--------+-------+
    |      1 |    10 |
    |      2 |    20 |
    |      3 |    30 |
    |      4 |    40 |
    |      5 |    50 |
    |      6 |    60 |
    +--------+-------+
    
    Supponi di eseguire la seguente query: "SELECT * FROM Items WHERE Price > (SELECT AVG(price) FROM Items);" (per il risultato segui ).
    In questo caso vuoi selezionare tutti gli elementi il cui prezzo è maggiore del prezzo medio, e la subquery serve per sapere qual è il prezzo medio degli elementi nella tabella
  • Re: Dubbio sul risultato di questo esercizio

    Sarebbe più comodo se riuscissi ad usare mysql command line , solo che ogni volta mi chiede la password di root che non conosco e non so come toglierla o trovarla.... grazie milel per la spiegazione
  • Re: Dubbio sul risultato di questo esercizio

    Ti chiede la password di windows o di mysql? Se è quest'ultimo caso ti basta disinstallarlo e reinstallarlo, perché poi ne puoi inserire una nuova


    Inviato dal mio iPhone utilizzando Tapatalk
  • Re: Dubbio sul risultato di questo esercizio

    Su mysql quando provo a utilizzarlo mi chiede la password di root , c'è un modo per disabilitarla a trovarla?
  • Re: Dubbio sul risultato di questo esercizio

    Puoi resettare la password seguendo questa procedura
Devi accedere o registrarti per scrivere nel forum
10 risposte