Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Xiaomi ha portato Redmi Watch 6 anche sul mercato italiano, puntando su un display AMOLED da 2,07 pollici con picco di luminosità a 2000 nit, frame in alluminio da 9,9mm e un'autonomia dichiarata di 12 giorni. Lo smartwatch gira su HyperOS 3 e integra GPS, Bluetooth 5.4 e oltre 150 sport mode. Il tutto a meno di 100 euro
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Con 22 tasti, il pulsante 5D, lo Shift Mode e il sensore PixArt 3395 da 26.000 DPI, il nuovo mouse wireless di Mad Catz si rivolge in modo preciso ai giocatori di MMO e RPG. Ma chi conosce già il R.A.T. 8+ ADV si accorgerà subito di quanto i due prodotti condividano, e di dove invece divergono
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC
Abbiamo provato la Gigabyte Radeon RX 9070 GRE Gaming OC, nuova proposta RDNA 4 che si inserisce tra GeForce RTX 5060 Ti e RTX 5070. Prestazioni solide in rasterizzazione e ray tracing, frequenze elevate grazie all'overclock di fabbrica e raffreddamento efficace: ecco come si comporta nei nostri test.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-01-2009, 10:33   #1
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
[SQL] Preparando l'esame di Basi di Dati... aiuti e consigli..

Ciao a tutti, se ho la seguente Basi di Dati:

Quote:
IMP(Nimp, Nome, Ndipart, Lavoro, Diret, Stip)
DIPART(Ndipart, NomeDipart, Luogo)
USO(Ndipart, Parte)
Fornitura(Fornitore, Parte)
E la seguente richiesta:

Quote:
Elencare i nomi e i codici dei dipartimenti dove lo stipendio medio degli impiegati è < 1000
Che ne pensate della seguente soluzione? E' corretta?

Codice:
Select distinct Ndipart, NomeDipart
from dipart
where Ndipart in 
               (Select distinct Ndipart
                 from imp
                 group by Ndipart
                 having avg(Stip) > 1000 )
In particolare vorrei sapere:

1)Se è possibile mettere nella Select il solo attributo del group by tralasciando quello usato nella having.
2)Quando uso nella where la strategia "attributo in ( nuova query )" il risultato della query interna deve dare solo il singolo attributo di confronto della query esterna? Cioè nella Select interna deve esserci solo e soltanto l'attributo di confronto?

Come sempre grazie
__________________

Ultima modifica di luxorl : 22-01-2009 alle 09:58.
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2009, 11:20   #2
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da luxorl Guarda i messaggi
Ciao a tutti, se ho la seguente Basi di Dati:


E la seguente richiesta:



Che ne pensate della seguente soluzione? E' corretta?

Codice:
Select distinct Ndipart, NomeDipart
from dipart
where Ndipart in 
               (Select distinct Ndipart
                 from imp
                 group by Ndipart
                 having avg(Stip) > 1000 )
E' corretta, ma entrambe le DISTINCT sono superflue.
La prima perche' per forza non potrai che avere dipartimenti distinti, essendo la chiave della tabella dipart contenuta nella clausola SELECT
La seconda perche' la DISTINCT e' implicita nella clausola IN (subselect)

Quote:
In particolare vorrei sapere:

1)Se è possibile mettere nella Select il solo attributo del group by tralasciando quello usato nella having.
Se ho capito bene la domanda, in generale si puo' mettere anche solo la clausola GROUP BY (e' il caso piu' frequente), ma in questa situazione non risolveresti il tuo problema

Quote:
2)Quando uso nella where la strategia "attributo in ( nuova query )" il risultato della query interna deve dare solo il singolo attributo di confronto della query esterna? Cioè nella Select interna deve esserci solo e soltanto l'attributo di confronto?

Come sempre grazie
Si', anche perche' non avrebbe senso e non servirebbe SELECTionare altri campi, perche' la INNER query serve solo ed esclusivamente per cercare i valori da soddisfare per la clausola di appartenenza IN.

Da SQL-Standard e' possibile avere un solo parametro di confronto di gruppo. Alcune estensioni dell'SQL (Oracle) prevedono l'uso anche di T-uple per questa condizione, es
Codice:
... WHERE (IDDipart, IDNazione) IN (SELECT IDDipart,IDNazione FROM ...)
in questo caso utile, p.es. se i codici di dipartimento sono univoci solo all'interno di una nazione.

In SQL-Standard si sarebbe dovuto scrivere storture simili a
Codice:
... WHERE (IDNazione*100000+IDDipart) IN (SELECT IDNazione*100000+IDDipart FROM ...)
in cui si puo' intuire chiaramente che l'ottimizzatore non puo' usare gli eventuali indici presenti sulle tabelle.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2009, 11:39   #3
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Grazie delle risposte, gentilissimo. Tutto chiaro.
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2009, 12:16   #4
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Bene.

Quote:
Originariamente inviato da luxorl Guarda i messaggi
1)Se è possibile mettere nella Select il solo attributo del group by tralasciando quello usato nella having.
Ho capito ora la domanda.
Puoi mettere zero o piu' elmenti della GROUP BY
zero o piu' costanti
zero o piu' funzioni di gruppo ciascuna delle quali dipendenti da zero o piu' elementi della GROUP BY
zero o piu' funzioni normali che accettino zero o piu' dei qualsiasi dei valori precedenti
(fatto salvo che almeno un elemento occorre selezionarlo)

Quindi, puoi anche evitare di mettere la funzione di gruppo scelta per l'eventuale HAVING, oppure ne puoi anche mettere un'altra

ES:
Codice:
SELECT ID1, COUNT(ID3), ID2, 4, 5, 7, SUM(ID1)+SUM(ID2), AVG(ID1+ID2), Funzione(ID3, AVG(ID18), ID1*ID1+AVG(ID2+ID1) )
FROM...
GROUP BY ID1, ID3, ID2, ID18
HAVING COV(ID3+ID2) > 10
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 16-01-2009 alle 12:24.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2009, 10:02   #5
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Ho dubbi sul Group By.
Come funziona quando si raggruppa su più attributi?

Per esempio se ho una tabella formata da attributi x, y, z, k e faccio

group by x, y, z

in uscita cosa ottengo? k viene eliminato?
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2009, 10:41   #6
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da luxorl Guarda i messaggi
Ho dubbi sul Group By.
Come funziona quando si raggruppa su più attributi?

Per esempio se ho una tabella formata da attributi x, y, z, k e faccio

group by x, y, z

in uscita cosa ottengo? k viene eliminato?
Certo, verra' eliminato.
Al termine avrai tanti record quante sono tutte le differenti T-Uple x,y,z

PS: Non usare MySql per fare le prove o per studiare, in quanto non si comporta in modo standard a fronte della Group By.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2009, 10:57   #7
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Certo, verra' eliminato.
Al termine avrai tanti record quante sono tutte le differenti T-Uple x,y,z

PS: Non usare MySql per fare le prove o per studiare, in quanto non si comporta in modo standard a fronte della Group By.
Noooooooooo... non mi dire così che mi sono appena fatto il bip per montare la BD dell'esame su MySql
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2009, 11:00   #8
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Ma esiste qualche programma che riempie in modo random ma coerente un DB?
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2009, 11:02   #9
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da luxorl Guarda i messaggi
Noooooooooo... non mi dire così che mi sono appena fatto il bip per montare la BD dell'esame su MySql
Ecco, peccato.
Davvero, non so se c'e' un parametro di compatibilita' per forzare MySql a comportarsi in modo standard a fronte delle GroupBy

PostgresSql andrebbe meglio.
E pure SqlServerExpress, che si installa con 2 click...
Ma ancora meglio Oracle Express (che e' gratuito e si installa con 3 click)
http://www.oracle.com/technology/pro.../xe/index.html

Per un dB pronto per le prove, SqlServer se non sbaglio ti chiede se vuoi anche installare l'istanza chiamata Northwind o qualcosa di simile, con fatture, clienti, fornitori, etc.
Per Oracle non mi risulta ci sia, e effettuare il restore di un database occorre imparare qualcosa in piu'.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2009, 10:30   #10
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Passiamo alle query toste d'esame

Dato il seguente schema

Università(u/nome, u/strada, u/città, a/a, num/fac)
Comprende(u/nome, u/città, a/a, nome/laurea)
CorsodiLaurea(nome/laurea, a/a, facoltà, durata)
Organizza(nome/laurea, i/nome, u/nome, u/città, a/a, n/ore/lez, n/ore/es, nome/prof, annocorso, f/c)
Appello(i/nome, nome/laurea, u/nome, u/città, n/ordine, a/a, data, ore, aula)
Esame(i/nome, nome/laurea, u/nome, u/città, n/ordine, a/a, s/nome, risultato)
Studente(s/nome, s/città, s/prov, matr, anno/nascita, nome/laurea, u/nome, u/città, a/a, annocorso)
Piano(s/nome, a/a, i/nome, nome/laurea, annocorso)
Orario(nome/laurea, i/nome, u/nome, u/città, a/a, giorno, ora, aula, capienza)


Scrivere una richiesta SQL per conoscere quest'anno, università per università, quanti professori svolgono il corso di Analisi I in Facoltà di Ingegneria che abbiano attivato almeno 5 corsi di laurea ed abbiamo almeno 500 iscritti al primo anno.

Mia soluzione
Codice:
Select distinct o.u/nome, count(distinct o.nome/prof)
From Organizza as o
Where o.i/nome='Analisi I' and o.a/a='2008/09' and
         4 < (Select count(distinct c.nome/laurea)
                From Corsodilaurea as c
                Where c.nome/laurea=o.nome/laurea and
                          c.facoltà='Ingegneria' and
                          499 < (Select count(distinct s.s/nome)
                                    From Studente as s
                                    Where s.nome/laurea=c.nome/laurea and
                                             s.annocorso=1))
Group by o.u/nome
Secondo me sbaglio qualcosa voi che dite?
__________________

Ultima modifica di luxorl : 26-01-2009 alle 10:33.
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2009, 10:42   #11
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Si', c'e' qualcosa che non va.
La Distinct insieme alla GROUP BY non ha molto senso, essendo che per definizione il risultato della GROUP BY saranno tanti record quante le possibili combinazioni esistenti degli elementi messi in GROUP BY.
Nel tuo caso e' gia' quello che vuoi ottenere (un record per ciascun nome di universita'), pertanto la DISTINCT e' superflua.

Poi c'e' qualche casino. ti propongo di iniziare a risolvere la seguente:
Codice:
Scrivere una richiesta SQL per conoscere quest'anno, università per università, quanti professori svolgono il corso di Analisi I in Facoltà di Ingegneria
e poi di condire aggiungendo qualche clausola per filtrare via i restanti intrusi...
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2009, 11:09   #12
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Poi c'e' qualche casino. ti propongo di iniziare a risolvere la seguente:
Codice:
Scrivere una richiesta SQL per conoscere quest'anno, università per università, quanti professori svolgono il corso di Analisi I in Facoltà di Ingegneria
e poi di condire aggiungendo qualche clausola per filtrare via i restanti intrusi...
Codice:
Select o.u/nome, count(distinct o.nome/prof)
          From Organizza as o, CorsodiLaurea as c
          Where o.i/nome='Analisi I' and o.a/a='2008/09' and
                    c.facoltà='Ingegneria' and
                    c.nome/laurea=o.nome/laurea and
                    c.a/a=o.a/a
Group By o.u/nome
Che riscrivendo il join in modo più visibile potrei fare come:

Codice:
Select o.u/nome, count(distinct o.nome/prof)
          From Organizza as o
          Where o.i/nome='Analisi I' and o.a/a='2008/09' and
                    o.nome/laurea in (Select c.nome/laurea
                                      From CorsodiLaurea as c
                                      Where c.a/a='2008/09' 
                                            and c.facoltà='Ingegneria')
Group By o.u/nome
Se è corretta provo ad arricchirla con le altre condizioni
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2009, 11:54   #13
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Direi che e' giusta, pero', giusto perche' stai preparando l'esame, ti proporrei di usare la sintassi corretta che prevede la divisione netta tra le clausole di JOIN e quelle di WHERE

A me personalmente piace di piu' la prima delle 2 query, quindi scriverei qualcosa tipo

Codice:
Select o.u/nome, count(distinct o.nome/prof)
          From Organizza as o
          JOIN CorsodiLaurea as c ON (o.nome/laurea = c.nome/laurea AND c.a/a=o.a/a)
          Where o.i/nome='Analisi I' and o.a/a='2008/09' and
                    c.facoltà='Ingegneria'
          Group By o.u/nome
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ...
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC Radeon RX 9070 GRE, AMD la porta in tutto il mon...
Reolink OMVI 3i WiFi: videosorveglianza più intelligente e facile da usare Reolink OMVI 3i WiFi: videosorveglianza pi&ugrav...
Recensione Vivo X300 Ultra: fotocamera eccezionale, ma prezzo proibitivo Recensione Vivo X300 Ultra: fotocamera ecceziona...
La sonda spaziale marziana NASA MAVEN &e...
Nucleare in Italia, approvata la legge d...
Surface Pro, nuova variante in arrivo: a...
Iliad lancia la sua prima offerta FWA pe...
Addio compromessi? I nuovi tablet rugged...
Cooler Master al Computex 2026: case sil...
G.Skill mostra AMD EXPO ULL al Computex:...
Hilti e i data center, l'ingegneria dell...
Narwal anticipa il Prime Day: sconti fin...
Sharkoon mantiene il rapporto qualit&agr...
Xference e Aruba insieme per l'IA privat...
Google Wallet, in arrivo i documenti d'i...
Recensione OPPO Enco Clip2: tanta tecnol...
Altro passo dei cinesi in Europa: Chery ...
AMD FSR 4.1: l'architettura RDNA 3.5 pot...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:14.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v