Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-01-2009, 11: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 10:58.
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2009, 12: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, 12: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, 13: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 13:24.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2009, 11: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, 11: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, 11: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, 12: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, 12: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, 11: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 11:33.
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 26-01-2009, 11: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, 12: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, 12: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


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Dreame H15 Mix: la soluzione 7-in-1 per ...
AirPods Pro 3 in forte sconto su Amazon:...
36 offerte Amazon, molte appena partite:...
2 caricatori multipli eccezionali: da 28...
OLED e 360 Hz a un prezzo senza preceden...
Roborock Q10 S5+ a un prezzo molto conve...
Upgrade PC a prezzo ridotto: le migliori...
Sono i 6 smartphone migliori su Amazon: ...
Google Pixel 9a a 361€, mai così ...
Super sconti sugli spazzolini Oral-B, an...
Aspira a 6000Pa, lava bene, costa 139€: ...
Nuove scorte: torna il portatile tuttofa...
Toyota usa giochi e premi per spingere i...
HarmonyOS ha raggiunto la soglia di sopr...
Le offerte Amazon più convenienti...
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: 11:17.


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